From 4e7235c1242c1fd9a3030429b584e1c9ccc117de Mon Sep 17 00:00:00 2001 From: Aditya Anand Date: Mon, 29 Apr 2019 22:58:47 +0530 Subject: [PATCH 01/13] grant/new: add grant amount splitter frontend code - introduces section to let users choose % for gitcoin contribution - summary reflects based on users selection - code refactor --- app/assets/v2/css/grants/fund.css | 94 ++- app/assets/v2/js/grants/fund.js | 78 ++- app/grants/templates/grants/fund.html | 69 ++- app/grants/templates/grants/heart.html | 804 +++++++++++++++++++++++++ 4 files changed, 1031 insertions(+), 14 deletions(-) create mode 100644 app/grants/templates/grants/heart.html diff --git a/app/assets/v2/css/grants/fund.css b/app/assets/v2/css/grants/fund.css index 67162a650ae..18e63a24319 100644 --- a/app/assets/v2/css/grants/fund.css +++ b/app/assets/v2/css/grants/fund.css @@ -1,3 +1,9 @@ +@media (min-width: 1200px) { + #gitcoin-grant-section .row { + border-bottom: 1px solid #515151; + } +} + .admin_profile a, #grant-link { color: #0D0764; @@ -14,12 +20,13 @@ object-fit: cover; } +#grants_form .form__input.valid, #grants_form .form__input.error { - background-position: top 0.55rem right 0.5rem; + background-position: top 0.5rem right 0.5rem; } -#grants_form input { - height: 2.5rem !important; +#grants_form input.form__input { + height: 2.5rem; } .select2-container--default .select2-selection--single, @@ -54,6 +61,87 @@ font-size: 12px; } +#gitcoin-grant-section .custom { + width: 4.25rem; + position: relative; + top: -10px; +} + +#gitcoin-grant-section input.form__input { + height: 46px; + font-size: var(--fs-title); +} + +#gitcoin-grant-section input.form__input.form__input.valid { + padding: 0; + background-image: none; +} + +#gitcoin-grant-input-amount-error { + position: absolute; + top: 4rem +} + +#gitcoin-grant-section .form__input.error { + background-position: top 0.75rem right 0.5rem; + background-size: auto 1.013rem; + padding-right: 1.8rem; +} + +#gitcoin-grant-section input.form__input[type=number]::-webkit-inner-spin-button, +#gitcoin-grant-section input.form__input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +#gitcoin-grant-input-error { + position: absolute; + top: 4rem; +} + +#gitcoin-grant-section .badge { + padding: 16px 24px; +} + +#gitcoin-grant-section .badge-active { + background-color: #72AAEB; + color: white; +} + +#gitcoin-grant-section .badge-inactive { + background: #E8F3FF; + color: #4A90E2; +} + +.inactive { + background-color: #E5E5E5 !important; + color: #9B9B9B !important; +} + +#gitcoin-grant-section .gitcoin-grant-summary p { + position: relative; + top: 10px; +} + +#gitcoin-grant-section .gitcoin-grant-summary i { + position: relative; + top: -2px; +} + +#gitcoin-grant-section .gitcoin-grant-summary p:last-child { + top: 1.2rem; + left: 1rem; +} + +.helper-text { + position: absolute; + left: 0; + right: 0; + bottom: -1.2rem; +} + @media (max-width: 767.98px) { .banner-img { diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 7a6e64a3f53..416267c0258 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -19,6 +19,47 @@ $(document).ready(function() { updateSummary(); }); + $('#gitcoin-grant-input-amount').on('input', () => { + $('.bot-heart').hide(); + updateSummary(); + + if ($('#gitcoin-grant-input-amount').val() == 0) { + $('#bot-heartbroken').show(); + } else if ($('#gitcoin-grant-input-amount').val() >= 20) { + $('#bot-heart-20').show(); + } else if ($('#gitcoin-grant-input-amount').val() >= 15) { + $('#bot-heart-15').show(); + } else if ($('#gitcoin-grant-input-amount').val() >= 10) { + $('#bot-heart-10').show(); + } else if ($('#gitcoin-grant-input-amount').val() > 0) { + $('#bot-heart-5').show(); + } + }); + + $('#gitcoin-grant-input-amount').on('focus', () => { + $('#gitcoin-grant-input-amount').removeClass('inactive'); + $('#gitcoin-grant-section .badge').addClass('inactive'); + }); + + $('#gitcoin-grant-section .badge').on('click', event => { + + $('#gitcoin-grant-section .badge').removeClass('inactive'); + $('#gitcoin-grant-input-amount').addClass('inactive'); + + const percentage = Number(event.currentTarget.getAttribute('data-percent')); + + $('#gitcoin-grant-input-amount').val(percentage); + $('.gitcoin-grant-percent').val(percentage); + + $('#gitcoin-grant-input-amount').trigger('input'); + + $('#gitcoin-grant-section .badge').removeClass('badge-active'); + $('#gitcoin-grant-section .badge').addClass('badge-inactive'); + + $(event.currentTarget).removeClass('badge-inactive'); + $(event.currentTarget).addClass('badge-active'); + }); + $('.contribution_type select').change(function() { if ($('.contribution_type select').val() == 'once') { $('.frequency').addClass('hidden'); @@ -132,7 +173,6 @@ $(document).ready(function() { from: accounts[0], gasPrice: realGasPrice }).on('error', function(error) { - console.log('1', error); _alert({ message: gettext('Your approval transaction failed. Please try again.')}, 'error'); }).on('transactionHash', function(transactionHash) { $('#sub_new_approve_tx_id').val(transactionHash); @@ -264,15 +304,39 @@ const waitforData = (callback) => { } }; - +// Updates summary section const updateSummary = (element) => { - $('#summary-period').html($('input#frequency_count').val()); - $('#summary-amount').html($('input#amount').val() ? $('input#amount').val() : 0); - $('#summary-frequency').html($('input#period').val() ? $('input#period').val() : 0); - $('#summary-frequency-unit').html($('#frequency_unit').val()); + $('.summary-period').html($('input#frequency_count').val()); + $('.summary-frequency-unit').html($('#frequency_unit').val()); + $('.summary-frequency').html($('input#period').val() ? $('input#period').val() : 0); + if ($('#token_symbol').val() === 'Any Token') { - $('#summary-token').html($('#js-token option:selected').text()); + $('.summary-token').html($('#js-token option:selected').text()); } + splitGrantAmount(); }; + +// Splits the total amount between the grant & gitcoin grant in the summary section +const splitGrantAmount = () => { + const percent = $('#gitcoin-grant-input-amount').val(); + const total_amount = $('input#amount').val() ? $('input#amount').val() : 0; + let gitcoin_grant_amount = 0; + let grant_amount = 0; + + if (total_amount != 0) { + if (!percent || percent == 0) { + $('#summary-gitcoin-grant').hide(); + grant_amount = Number($('input#amount').val()); + } else { + $('#summary-gitcoin-grant').show(); + gitcoin_grant_amount = parseFloat(Number(percent / 100 * Number($('input#amount').val())).toFixed(4)); + grant_amount = parseFloat((Number($('input#amount').val()) - gitcoin_grant_amount).toFixed(4)); + } + } + + $('.gitcoin-grant-percent').html(percent); + $('.summary-gitcoin-amount').html(gitcoin_grant_amount); + $('#summary-amount').html(grant_amount); +}; \ No newline at end of file diff --git a/app/grants/templates/grants/fund.html b/app/grants/templates/grants/fund.html index 3cc37926b35..22a32aed669 100644 --- a/app/grants/templates/grants/fund.html +++ b/app/grants/templates/grants/fund.html @@ -128,6 +128,45 @@

{% trans "Fund Grant" %}

+
+
+
+

{% trans "Support Gitcoin" %}

+

+ {% trans "By using this service, you’ll also be contributing" %} + 5 + {% trans "% of your contribution to the system of this service." %} +

+
+
+ {% include './heart.html' %} +
+
5%
+
10%
+
15%
+
+
+
+
+ +

custom %

+
+
+

+ + 5 + - +

+

+ every - + - + (- times) +

+
+
+
+
+
@@ -145,26 +184,48 @@
{% trans "Gas Settings" %}
{% trans "You are contributing" %} - - + {{ grant.token_symbol }} {% trans "to this grant every" %} - - - -. + - + -.

+ +

+ + {% trans "You are additionally contributing" %} + - + + {% trans "to the gitcoin grant every" %} + - + -. +

+

{% trans "Your contribution will stop once this payment has happened" %} - - times. + - times.

+

{% trans "The first payment will happen within 5 minutes after you click Contribute to Grant." %}

+ + + +

{% trans "Note: You will have to approve 2 transactions via MetaMask on submit." %} Read how this works. diff --git a/app/grants/templates/grants/heart.html b/app/grants/templates/grants/heart.html new file mode 100644 index 00000000000..11627165760 --- /dev/null +++ b/app/grants/templates/grants/heart.html @@ -0,0 +1,804 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thanks for + keeping us + alive! + + + + + + + + + + + + \ No newline at end of file From e06de5b10bf03b4e76fa6f5dbe9c35f3df6e844f Mon Sep 17 00:00:00 2001 From: Aditya Anand Date: Mon, 13 May 2019 14:35:32 +0530 Subject: [PATCH 02/13] addressed review comments --- app/assets/v2/js/grants/fund.js | 1 + app/grants/templates/grants/fund.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 416267c0258..5d1c8f8f58f 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -173,6 +173,7 @@ $(document).ready(function() { from: accounts[0], gasPrice: realGasPrice }).on('error', function(error) { + console.log('1', error); _alert({ message: gettext('Your approval transaction failed. Please try again.')}, 'error'); }).on('transactionHash', function(transactionHash) { $('#sub_new_approve_tx_id').val(transactionHash); diff --git a/app/grants/templates/grants/fund.html b/app/grants/templates/grants/fund.html index 22a32aed669..becbe63660f 100644 --- a/app/grants/templates/grants/fund.html +++ b/app/grants/templates/grants/fund.html @@ -220,7 +220,7 @@

{% trans "Gas Settings" %}
Thanks for Contributing!
{% include 'shared/footer.html' %} {% include 'grants/shared/shared_scripts.html' %} + diff --git a/app/grants/templates/grants/new.html b/app/grants/templates/grants/new.html index 2fe0db5afb2..68392293b41 100644 --- a/app/grants/templates/grants/new.html +++ b/app/grants/templates/grants/new.html @@ -157,6 +157,7 @@
{% trans "Gas Settings" %}
+ From aee6d8746b549de48e56b491a7b3d27d501e1d72 Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Tue, 14 May 2019 22:37:28 +0900 Subject: [PATCH 04/13] grants fee contracts, js code, templates --- app/app/settings.py | 9 + app/assets/v2/js/grants/compiledSplitter.js | 98 +- ...ct.js => compiledSubscriptionContract0.js} | 0 .../grants/compiledSubscriptionContract1.js | 18068 ++++++++++++++++ app/assets/v2/js/grants/fund.js | 277 +- app/assets/v2/js/grants/new.js | 51 +- app/assets/v2/js/grants/shared.js | 7 +- app/grants/abi.py | 174 + app/grants/abi_v1.json | 18068 ++++++++++++++++ app/grants/admin.py | 2 +- app/grants/convert_abi.py | 9 + app/grants/models.py | 9 +- app/grants/templates/grants/cancel.html | 3 +- app/grants/templates/grants/detail/index.html | 5 +- app/grants/templates/grants/fund.html | 7 +- app/grants/templates/grants/new.html | 6 +- app/grants/templates/grants/newv0.html | 169 + app/grants/urls.py | 5 +- app/grants/views.py | 85 +- 19 files changed, 36881 insertions(+), 171 deletions(-) rename app/assets/v2/js/grants/{compiledSubscriptionContract.js => compiledSubscriptionContract0.js} (100%) create mode 100644 app/assets/v2/js/grants/compiledSubscriptionContract1.js create mode 100644 app/grants/abi_v1.json create mode 100644 app/grants/convert_abi.py create mode 100644 app/grants/templates/grants/newv0.html diff --git a/app/app/settings.py b/app/app/settings.py index 5e4e88b63e6..de188a6de1d 100644 --- a/app/app/settings.py +++ b/app/app/settings.py @@ -577,6 +577,15 @@ # Grants GRANTS_OWNER_ACCOUNT = env('GRANTS_OWNER_ACCOUNT', default='0xD386793F1DB5F21609571C0164841E5eA2D33aD8') GRANTS_PRIVATE_KEY = env('GRANTS_PRIVATE_KEY', default='') +GRANTS_SPLITTER_ROPSTEN = env('GRANTS_SPLITTER_ROPSTEN', default='0xe2fd6dfe7f371e884e782d46f043552421b3a9d9') +GRANTS_SPLITTER_MAINNET = env('GRANTS_SPLITTER_MAINNET', default='0xdf869FAD6dB91f437B59F1EdEFab319493D4C4cE') +GRANTS_NETWORK = env('GRANTS_NETWORK', default='mainnet') +GITCOIN_DONATION_ADDRESS = env('GITCOIN_DONATION_ADDRESS', default='0x00De4B13153673BCAE2616b67bf822500d325Fc3') +SPLITTER_CONTRACT_ADDRESS = '' +if GRANTS_NETWORK == 'mainnet': + SPLITTER_CONTRACT_ADDRESS = GRANTS_SPLITTER_MAINNET +else: + SPLITTER_CONTRACT_ADDRESS = GRANTS_SPLITTER_ROPSTEN METATX_GAS_PRICE_THRESHOLD = float(env('METATX_GAS_PRICE_THRESHOLD', default='10000.0')) diff --git a/app/assets/v2/js/grants/compiledSplitter.js b/app/assets/v2/js/grants/compiledSplitter.js index 66bea8c3e08..5697a52cd7c 100644 --- a/app/assets/v2/js/grants/compiledSplitter.js +++ b/app/assets/v2/js/grants/compiledSplitter.js @@ -1,68 +1,68 @@ let compiledSplitter0 = { - "className": "Splitter", - "args": [], - "code": "608060405234801561001057600080fd5b5061022e806100206000396000f3fe6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ab832b438114610045575b600080fd5b34801561005157600080fd5b506100a3600480360360a081101561006857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013591606081013591608090910135166100a5565b005b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8781166024830152604482018690529151918316916323b872dd916064808201926020929091908290030181600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b505050506040513d602081101561014e57600080fd5b5050604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590529151918316916323b872dd916064808201926020929091908290030181600087803b1580156101cf57600080fd5b505af11580156101e3573d6000803e3d6000fd5b505050506040513d60208110156101f957600080fd5b5050505050505056fea165627a7a7230582040d38dee362e14bbc2f24c3ecf83e3e17941ae353766bfcad45738f1fb9d4b2d0029", - "runtimeBytecode": "6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ab832b438114610045575b600080fd5b34801561005157600080fd5b506100a3600480360360a081101561006857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013591606081013591608090910135166100a5565b005b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8781166024830152604482018690529151918316916323b872dd916064808201926020929091908290030181600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b505050506040513d602081101561014e57600080fd5b5050604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590529151918316916323b872dd916064808201926020929091908290030181600087803b1580156101cf57600080fd5b505af11580156101e3573d6000803e3d6000fd5b505050506040513d60208110156101f957600080fd5b5050505050505056fea165627a7a7230582040d38dee362e14bbc2f24c3ecf83e3e17941ae353766bfcad45738f1fb9d4b2d0029", - "realRuntimeBytecode": "6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ab832b438114610045575b600080fd5b34801561005157600080fd5b506100a3600480360360a081101561006857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013591606081013591608090910135166100a5565b005b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8781166024830152604482018690529151918316916323b872dd916064808201926020929091908290030181600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b505050506040513d602081101561014e57600080fd5b5050604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590529151918316916323b872dd916064808201926020929091908290030181600087803b1580156101cf57600080fd5b505af11580156101e3573d6000803e3d6000fd5b505050506040513d60208110156101f957600080fd5b5050505050505056fea165627a7a72305820", - "linkReferences": {}, - "swarmHash": "40d38dee362e14bbc2f24c3ecf83e3e17941ae353766bfcad45738f1fb9d4b2d", - "gasEstimates": { - "creation": { - "codeDepositCost": "111600", - "executionCost": "159", - "totalCost": "111759" + 'className': 'Splitter', + 'args': [], + 'code': '608060405234801561001057600080fd5b5061022e806100206000396000f3fe6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ab832b438114610045575b600080fd5b34801561005157600080fd5b506100a3600480360360a081101561006857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013591606081013591608090910135166100a5565b005b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8781166024830152604482018690529151918316916323b872dd916064808201926020929091908290030181600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b505050506040513d602081101561014e57600080fd5b5050604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590529151918316916323b872dd916064808201926020929091908290030181600087803b1580156101cf57600080fd5b505af11580156101e3573d6000803e3d6000fd5b505050506040513d60208110156101f957600080fd5b5050505050505056fea165627a7a7230582040d38dee362e14bbc2f24c3ecf83e3e17941ae353766bfcad45738f1fb9d4b2d0029', + 'runtimeBytecode': '6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ab832b438114610045575b600080fd5b34801561005157600080fd5b506100a3600480360360a081101561006857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013591606081013591608090910135166100a5565b005b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8781166024830152604482018690529151918316916323b872dd916064808201926020929091908290030181600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b505050506040513d602081101561014e57600080fd5b5050604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590529151918316916323b872dd916064808201926020929091908290030181600087803b1580156101cf57600080fd5b505af11580156101e3573d6000803e3d6000fd5b505050506040513d60208110156101f957600080fd5b5050505050505056fea165627a7a7230582040d38dee362e14bbc2f24c3ecf83e3e17941ae353766bfcad45738f1fb9d4b2d0029', + 'realRuntimeBytecode': '6080604052600436106100405763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663ab832b438114610045575b600080fd5b34801561005157600080fd5b506100a3600480360360a081101561006857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135821691604082013591606081013591608090910135166100a5565b005b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8781166024830152604482018690529151918316916323b872dd916064808201926020929091908290030181600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b505050506040513d602081101561014e57600080fd5b5050604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590529151918316916323b872dd916064808201926020929091908290030181600087803b1580156101cf57600080fd5b505af11580156101e3573d6000803e3d6000fd5b505050506040513d60208110156101f957600080fd5b5050505050505056fea165627a7a72305820', + 'linkReferences': {}, + 'swarmHash': '40d38dee362e14bbc2f24c3ecf83e3e17941ae353766bfcad45738f1fb9d4b2d', + 'gasEstimates': { + 'creation': { + 'codeDepositCost': '111600', + 'executionCost': '159', + 'totalCost': '111759' }, - "external": { - "splitTransfer(address,address,uint256,uint256,address)": "infinite" + 'external': { + 'splitTransfer(address,address,uint256,uint256,address)': 'infinite' } }, - "functionHashes": { - "splitTransfer(address,address,uint256,uint256,address)": "ab832b43" + 'functionHashes': { + 'splitTransfer(address,address,uint256,uint256,address)': 'ab832b43' }, - "abiDefinition": [ + 'abiDefinition': [ { - "constant": false, - "inputs": [ + 'constant': false, + 'inputs': [ { - "name": "toFirst", - "type": "address" + 'name': 'toFirst', + 'type': 'address' }, { - "name": "toSecond", - "type": "address" + 'name': 'toSecond', + 'type': 'address' }, { - "name": "valueFirst", - "type": "uint256" + 'name': 'valueFirst', + 'type': 'uint256' }, { - "name": "valueSecond", - "type": "uint256" + 'name': 'valueSecond', + 'type': 'uint256' }, { - "name": "tokenAddress", - "type": "address" + 'name': 'tokenAddress', + 'type': 'address' } ], - "name": "splitTransfer", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function", - "signature": "0xab832b43" + 'name': 'splitTransfer', + 'outputs': [], + 'payable': false, + 'stateMutability': 'nonpayable', + 'type': 'function', + 'signature': '0xab832b43' } ], - "filename": "/Users/danlipert/gitcoin/splitter/.embark/contracts/Splitter.sol", - "originalFilename": "contracts/Splitter.sol", - "path": "/Users/danlipert/gitcoin/splitter/contracts/Splitter.sol", - "gas": 198208, - "gasPrice": "20000000000", - "type": "file", - "deploy": true, - "_gasLimit": 6000000, - "error": false, - "deploymentAccount": "0x4867228a029A44bf1814cA26A459bba578c03c9A", - "realArgs": [], - "deployedAddress": "0xCD32F7CF408e98B2e15C686A3a6f10B27D2563EF", - "transactionHash": "0x4ed10b2c826d66a0e2ccb4a5caeb39e2a9693333bc064b9ca4aa8b4dbbbbeeb9" -} + 'filename': '/Users/danlipert/gitcoin/splitter/.embark/contracts/Splitter.sol', + 'originalFilename': 'contracts/Splitter.sol', + 'path': '/Users/danlipert/gitcoin/splitter/contracts/Splitter.sol', + 'gas': 198208, + 'gasPrice': '20000000000', + 'type': 'file', + 'deploy': true, + '_gasLimit': 6000000, + 'error': false, + 'deploymentAccount': '0x4867228a029A44bf1814cA26A459bba578c03c9A', + 'realArgs': [], + 'deployedAddress': '0xCD32F7CF408e98B2e15C686A3a6f10B27D2563EF', + 'transactionHash': '0x4ed10b2c826d66a0e2ccb4a5caeb39e2a9693333bc064b9ca4aa8b4dbbbbeeb9' +}; diff --git a/app/assets/v2/js/grants/compiledSubscriptionContract.js b/app/assets/v2/js/grants/compiledSubscriptionContract0.js similarity index 100% rename from app/assets/v2/js/grants/compiledSubscriptionContract.js rename to app/assets/v2/js/grants/compiledSubscriptionContract0.js diff --git a/app/assets/v2/js/grants/compiledSubscriptionContract1.js b/app/assets/v2/js/grants/compiledSubscriptionContract1.js new file mode 100644 index 00000000000..5f3b1ef84a2 --- /dev/null +++ b/app/assets/v2/js/grants/compiledSubscriptionContract1.js @@ -0,0 +1,18068 @@ +let compiledSubscription1 = { + 'contractName': 'Subscription', + 'abi': [ + { + 'constant': true, + 'inputs': [], + 'name': 'requiredGasPrice', + 'outputs': [ + { + 'name': '', + 'type': 'uint256' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [], + 'name': 'requiredTokenAmount', + 'outputs': [ + { + 'name': '', + 'type': 'uint256' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [], + 'name': 'requiredToAddress', + 'outputs': [ + { + 'name': '', + 'type': 'address' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [], + 'name': 'requiredPeriodSeconds', + 'outputs': [ + { + 'name': '', + 'type': 'uint256' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [], + 'name': 'requiredTokenAddress', + 'outputs': [ + { + 'name': '', + 'type': 'address' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [], + 'name': 'relayer', + 'outputs': [ + { + 'name': '', + 'type': 'address' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [ + { + 'name': '', + 'type': 'address' + } + ], + 'name': 'extraNonce', + 'outputs': [ + { + 'name': '', + 'type': 'uint256' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [], + 'name': 'author', + 'outputs': [ + { + 'name': '', + 'type': 'address' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [ + { + 'name': '', + 'type': 'bytes32' + } + ], + 'name': 'nextValidTimestamp', + 'outputs': [ + { + 'name': '', + 'type': 'uint256' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'inputs': [ + { + 'name': '_toAddress', + 'type': 'address' + }, + { + 'name': '_tokenAddress', + 'type': 'address' + }, + { + 'name': '_tokenAmount', + 'type': 'uint256' + }, + { + 'name': '_periodSeconds', + 'type': 'uint256' + }, + { + 'name': '_gasPrice', + 'type': 'uint256' + }, + { + 'name': '_version', + 'type': 'uint8' + }, + { + 'name': '_relayer', + 'type': 'address' + } + ], + 'payable': false, + 'stateMutability': 'nonpayable', + 'type': 'constructor' + }, + { + 'payable': true, + 'stateMutability': 'payable', + 'type': 'fallback' + }, + { + 'anonymous': false, + 'inputs': [ + { + 'indexed': true, + 'name': 'from', + 'type': 'address' + }, + { + 'indexed': true, + 'name': 'to', + 'type': 'address' + }, + { + 'indexed': false, + 'name': 'tokenAddress', + 'type': 'address' + }, + { + 'indexed': false, + 'name': 'tokenAmount', + 'type': 'uint256' + }, + { + 'indexed': false, + 'name': 'periodSeconds', + 'type': 'uint256' + }, + { + 'indexed': false, + 'name': 'gasPrice', + 'type': 'uint256' + }, + { + 'indexed': false, + 'name': 'nonce', + 'type': 'uint256' + } + ], + 'name': 'ExecuteSubscription', + 'type': 'event' + }, + { + 'anonymous': false, + 'inputs': [ + { + 'indexed': true, + 'name': 'from', + 'type': 'address' + }, + { + 'indexed': true, + 'name': 'to', + 'type': 'address' + }, + { + 'indexed': false, + 'name': 'tokenAddress', + 'type': 'address' + }, + { + 'indexed': false, + 'name': 'tokenAmount', + 'type': 'uint256' + }, + { + 'indexed': false, + 'name': 'periodSeconds', + 'type': 'uint256' + }, + { + 'indexed': false, + 'name': 'gasPrice', + 'type': 'uint256' + }, + { + 'indexed': false, + 'name': 'nonce', + 'type': 'uint256' + } + ], + 'name': 'CancelSubscription', + 'type': 'event' + }, + { + 'constant': true, + 'inputs': [ + { + 'name': 'subscriptionHash', + 'type': 'bytes32' + }, + { + 'name': 'gracePeriodSeconds', + 'type': 'uint256' + } + ], + 'name': 'isSubscriptionActive', + 'outputs': [ + { + 'name': '', + 'type': 'bool' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [ + { + 'name': 'from', + 'type': 'address' + }, + { + 'name': 'to', + 'type': 'address' + }, + { + 'name': 'tokenAddress', + 'type': 'address' + }, + { + 'name': 'tokenAmount', + 'type': 'uint256' + }, + { + 'name': 'periodSeconds', + 'type': 'uint256' + }, + { + 'name': 'gasPrice', + 'type': 'uint256' + }, + { + 'name': 'nonce', + 'type': 'uint256' + } + ], + 'name': 'getSubscriptionHash', + 'outputs': [ + { + 'name': '', + 'type': 'bytes32' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [ + { + 'name': 'subscriptionHash', + 'type': 'bytes32' + }, + { + 'name': 'signature', + 'type': 'bytes' + } + ], + 'name': 'getSubscriptionSigner', + 'outputs': [ + { + 'name': '', + 'type': 'address' + } + ], + 'payable': false, + 'stateMutability': 'pure', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [ + { + 'name': 'from', + 'type': 'address' + }, + { + 'name': 'to', + 'type': 'address' + }, + { + 'name': 'tokenAddress', + 'type': 'address' + }, + { + 'name': 'tokenAmount', + 'type': 'uint256' + }, + { + 'name': 'periodSeconds', + 'type': 'uint256' + }, + { + 'name': 'gasPrice', + 'type': 'uint256' + }, + { + 'name': 'nonce', + 'type': 'uint256' + }, + { + 'name': 'signature', + 'type': 'bytes' + } + ], + 'name': 'isSubscriptionReady', + 'outputs': [ + { + 'name': '', + 'type': 'bool' + } + ], + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': false, + 'inputs': [ + { + 'name': 'from', + 'type': 'address' + }, + { + 'name': 'to', + 'type': 'address' + }, + { + 'name': 'tokenAddress', + 'type': 'address' + }, + { + 'name': 'tokenAmount', + 'type': 'uint256' + }, + { + 'name': 'periodSeconds', + 'type': 'uint256' + }, + { + 'name': 'gasPrice', + 'type': 'uint256' + }, + { + 'name': 'nonce', + 'type': 'uint256' + }, + { + 'name': 'signature', + 'type': 'bytes' + } + ], + 'name': 'cancelSubscription', + 'outputs': [ + { + 'name': 'success', + 'type': 'bool' + } + ], + 'payable': false, + 'stateMutability': 'nonpayable', + 'type': 'function' + }, + { + 'constant': false, + 'inputs': [ + { + 'name': 'from', + 'type': 'address' + }, + { + 'name': 'to', + 'type': 'address' + }, + { + 'name': 'tokenAddress', + 'type': 'address' + }, + { + 'name': 'tokenAmount', + 'type': 'uint256' + }, + { + 'name': 'periodSeconds', + 'type': 'uint256' + }, + { + 'name': 'gasPrice', + 'type': 'uint256' + }, + { + 'name': 'nonce', + 'type': 'uint256' + }, + { + 'name': 'signature', + 'type': 'bytes' + } + ], + 'name': 'executeSubscription', + 'outputs': [ + { + 'name': 'success', + 'type': 'bool' + } + ], + 'payable': false, + 'stateMutability': 'nonpayable', + 'type': 'function' + }, + { + 'constant': false, + 'inputs': [], + 'name': 'endContract', + 'outputs': [], + 'payable': false, + 'stateMutability': 'nonpayable', + 'type': 'function' + } + ], + 'metadata': '{\'compiler\':{\'version\':\'0.5.2+commit.1df8f40c\'},\'language\':\'Solidity\',\'output\':{\'abi\':[{\'constant\':true,\'inputs\':[],\'name\':\'requiredGasPrice\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'subscriptionHash\',\'type\':\'bytes32\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'getSubscriptionSigner\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'pure\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredTokenAmount\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredToAddress\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredPeriodSeconds\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredTokenAddress\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'cancelSubscription\',\'outputs\':[{\'name\':\'success\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'relayer\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'\',\'type\':\'address\'}],\'name\':\'extraNonce\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'author\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'subscriptionHash\',\'type\':\'bytes32\'},{\'name\':\'gracePeriodSeconds\',\'type\':\'uint256\'}],\'name\':\'isSubscriptionActive\',\'outputs\':[{\'name\':\'\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[],\'name\':\'endContract\',\'outputs\':[],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'getSubscriptionHash\',\'outputs\':[{\'name\':\'\',\'type\':\'bytes32\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'executeSubscription\',\'outputs\':[{\'name\':\'success\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'isSubscriptionReady\',\'outputs\':[{\'name\':\'\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'\',\'type\':\'bytes32\'}],\'name\':\'nextValidTimestamp\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'inputs\':[{\'name\':\'_toAddress\',\'type\':\'address\'},{\'name\':\'_tokenAddress\',\'type\':\'address\'},{\'name\':\'_tokenAmount\',\'type\':\'uint256\'},{\'name\':\'_periodSeconds\',\'type\':\'uint256\'},{\'name\':\'_gasPrice\',\'type\':\'uint256\'},{\'name\':\'_version\',\'type\':\'uint8\'},{\'name\':\'_relayer\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'constructor\'},{\'payable\':true,\'stateMutability\':\'payable\',\'type\':\'fallback\'},{\'anonymous\':false,\'inputs\':[{\'indexed\':true,\'name\':\'from\',\'type\':\'address\'},{\'indexed\':true,\'name\':\'to\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAddress\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'ExecuteSubscription\',\'type\':\'event\'},{\'anonymous\':false,\'inputs\':[{\'indexed\':true,\'name\':\'from\',\'type\':\'address\'},{\'indexed\':true,\'name\':\'to\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAddress\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'CancelSubscription\',\'type\':\'event\'}],\'devdoc\':{\'methods\':{}},\'userdoc\':{\'methods\':{}}},\'settings\':{\'compilationTarget\':{\'/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\':\'Subscription\'},\'evmVersion\':\'byzantium\',\'libraries\':{},\'optimizer\':{\'enabled\':false,\'runs\':200},\'remappings\':[]},\'sources\':{\'/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\':{\'keccak256\':\'0xd23b843d2a5cbd6e762c03fc55c62e331f306f37458e14cf791f4d10fc8f4c4f\',\'urls\':[\'bzzr://33f93fb60362d588a089d221a20097a97112f7060364f97151667be7e2007bc7\']},\'openzeppelin-solidity/contracts/cryptography/ECDSA.sol\':{\'keccak256\':\'0x0cbeb7f69b70ff62eb5536caebbc8701b6490ae7ee2e252d77891cf6eba11326\',\'urls\':[\'bzzr://58a443499466ee0706d22af81b43ab6779b519255fbc66276546386ec00a30d7\']},\'openzeppelin-solidity/contracts/math/SafeMath.sol\':{\'keccak256\':\'0xc2a200a877c4a9b2475c246c54ffecc69ffde3e11af83319c63c2dc5458bac80\',\'urls\':[\'bzzr://c8876e2c39b60f155d748d71d715c8f3903fae5a405ac599adcb6ad2f9a583f9\']},\'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\':{\'keccak256\':\'0x3dceb7e4aa237a56111c13f77d7efadeceda7271d62bfac94ac79afab7c1f411\',\'urls\':[\'bzzr://2f34152a5bec385352002c31bc89f5e9935f628f1923ccea45c2281e0084a4db\']},\'openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\':{\'keccak256\':\'0x59e7df16169a498cb8837963b2f5461d88e63bd1eb6c7d58b814d76b84ccbe61\',\'urls\':[\'bzzr://e572c9c4e02e37349702451bf3b5dcbbc86a19da5a51695b5b3e1bfe1e7825dc\']}},\'version\':1}', + 'bytecode': '0x608060405234801561001057600080fd5b5060405160e080612345833981018060405260e081101561003057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846004819055508360058190555082600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505061219a806101ab6000396000f3fe608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029', + 'deployedBytecode': '0x608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029', + 'sourceMap': '1091:13213:1:-;;;3145:489;8:9:-1;5:2;;;30:1;27;20:12;5:2;3145:489:1;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3145:489:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3396:10;3378:17;;:28;;;;;;;;;;;;;;;;;;3437:13;3416:20;;:34;;;;;;;;;;;;;;;;;;3480:12;3460:19;:32;;;;3524:14;3502:21;:36;;;;3565:9;3548:16;:26;;;;3591:10;3584:6;;:17;;;;;;;;;;;;;;;;;;3619:8;3611:7;;:16;;;;;;;;;;;;;;;;;;3145:489;;;;;;;1091:13213;;;;;;', + 'deployedSourceMap': '1091:13213:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14286:9;;;1631:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1631:31:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6029:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6029:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6029:318:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6029:318:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6029:318:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6029:318:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6029:318:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1549:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1549:34:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1470:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1470:32:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1589:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1589:36:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1508:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1508:35:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7985:1423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7985:1423:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7985:1423:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7985:1423:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7985:1423:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1288:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1288:22:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2088:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2088:45:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2088:45:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1212:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1212:29:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3874:390;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3874:390:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3874:390:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14057:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14057:114:1;;;:::i;:::-;;4420:1548;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4420:1548:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4420:1548:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9566:3091;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9566:3091:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9566:3091:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9566:3091:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9566:3091:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6470:1261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6470:1261:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6470:1261:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6470:1261:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6470:1261:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1854:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1854:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1854:53:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1631:31;;;;:::o;6029:318::-;6250:7;6280:60;6330:9;6280:41;:16;:39;:41::i;:::-;:49;;:60;;;;:::i;:::-;6273:67;;6029:318;;;;:::o;1549:34::-;;;;:::o;1470:32::-;;;;;;;;;;;;;:::o;1589:36::-;;;;:::o;1508:35::-;;;;;;;;;;;;;:::o;7985:1423::-;8588:12;8616:24;8643:110;8676:4;8682:2;8686:12;8700:11;8713:13;8728:8;8738:5;8643:19;:110::i;:::-;8616:137;;8763:14;8780:50;8802:16;8820:9;8780:21;:50::i;:::-;8763:67;;8897:4;8887:14;;:6;:14;;;8879:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9020:10;9012:18;;:4;:18;;;9004:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9251:2;9206:18;:36;9225:16;9206:36;;;;;;;;;;;:48;;;;9308:2;9270:109;;9302:4;9270:109;;;9312:12;9326:11;9339:13;9354:8;9364:5;9270:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9397:4;9390:11;;;;7985:1423;;;;;;;;;;:::o;1288:22::-;;;;;;;;;;;;;:::o;2088:45::-;;;;;;;;;;;;;;;;;:::o;1212:29::-;;;;;;;;;;;;;:::o;3874:390::-;4027:4;4096:2;4050:18;:36;4069:16;4050:36;;;;;;;;;;;;:49;4047:88;;;4119:5;4112:12;;;;4047:88;4187:60;4228:18;4187;:36;4206:16;4187:36;;;;;;;;;;;;:40;;:60;;;;:::i;:::-;4152:15;:95;;4144:113;;3874:390;;;;;:::o;14057:114::-;14129:6;;;;;;;;;;;14117:18;;:10;:18;;;14109:27;;;;;;;;14157:6;;;;;;;;;;;14144:20;;;4420:1548;4956:7;5122:1;5093:31;;:17;;;;;;;;;;;:31;;;:58;;;;5134:17;;;;;;;;;;;5128:23;;:2;:23;;;5093:58;5084:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5233:1;5201:34;;:20;;;;;;;;;;;:34;;;:74;;;;5255:20;;;;;;;;;;;5239:36;;:12;:36;;;5201:74;5192:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5352:1;5329:19;;:24;:62;;;;5372:19;;5357:11;:34;5329:62;5320:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5469:1;5444:21;;:26;:68;;;;5491:21;;5474:13;:38;5444:68;5435:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:1;5567:16;;:21;:53;;;;5604:16;;5592:8;:28;5567:53;5558:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5731:4;5726:10;;5759:1;5754:7;;5787:4;5810;5832:2;5852:12;5882:11;5911:13;5942:8;5692:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5692:268:1;;;5669:292;;;;;;5662:299;;4420:1548;;;;;;;;;:::o;9566:3091::-;10171:12;10221:7;;;;;;;;;;;10207:21;;:10;:21;;;10199:30;;;;;;;;10239:24;10266:110;10299:4;10305:2;10309:12;10323:11;10336:13;10351:8;10361:5;10266:19;:110::i;:::-;10239:137;;10453:99;10473:4;10479:2;10483:12;10497:11;10510:13;10525:8;10535:5;10542:9;10453:19;:99::i;:::-;10444:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:34;10772:13;10752:15;:19;;:34;;;;:::i;:::-;10713:18;:36;10732:16;10713:36;;;;;;;;;;;:73;;;;10913:10;:16;10924:4;10913:16;;;;;;;;;;;;;;;;10905:5;:24;10902:75;;;10961:5;10942:10;:16;10953:4;10942:16;;;;;;;;;;;;;;;:24;;;;10902:75;11062:23;11094:12;11088:29;;;11118:2;11088:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11088:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11088:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11088:33:1;;;;;;;;;;;;;;;;11062:59;;11137:12;11131:32;;;11164:4;11169:2;11172:11;11131:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11131:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11131:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11131:53:1;;;;;;;;;;;;;;;;;11252:12;11246:29;;;11276:2;11246:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11246:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11246:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11246:33:1;;;;;;;;;;;;;;;;11230:11;11214:15;:27;11213:66;11194:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11371:14;:12;:14::i;:::-;11352:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11520:2;11481:110;;11514:4;11481:110;;;11524:12;11538:11;11551:13;11566:8;11576:5;11481:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:1;11811:8;:12;11807:822;;;12410:12;12404:32;;;12437:4;12443:10;12455:8;12404:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12404:60:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12404:60:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12404:60:1;;;;;;;;;;;;;;;;;12503:14;:12;:14::i;:::-;12478:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11807:822;12646:4;12639:11;;;;9566:3091;;;;;;;;;;:::o;6470:1261::-;7088:4;7108:24;7135:110;7168:4;7174:2;7178:12;7192:11;7205:13;7220:8;7230:5;7135:19;:110::i;:::-;7108:137;;7255:14;7272:50;7294:16;7312:9;7272:21;:50::i;:::-;7255:67;;7332:17;7358:12;7352:29;;;7382:4;7396;7352:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7352:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7352:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7352:50:1;;;;;;;;;;;;;;;;7332:70;;7412:15;7436:12;7430:29;;;7460:4;7430:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7430:35:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7430:35:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7430:35:1;;;;;;;;;;;;;;;;7412:53;;7507:4;7497:14;;:6;:14;;;:40;;;;;7535:2;7527:10;;:4;:10;;;;7497:40;:111;;;;;7572:18;:36;7591:16;7572:36;;;;;;;;;;;;7553:15;:55;;7497:111;:165;;;;;7637:25;7653:8;7637:11;:15;;:25;;;;:::i;:::-;7624:9;:38;;7497:165;:217;;;;;7689:25;7705:8;7689:11;:15;;:25;;;;:::i;:::-;7678:7;:36;;7497:217;7476:248;;;;;;6470:1261;;;;;;;;;;:::o;1854:53::-;;;;;;;;;;;;;;;;;:::o;2650:265:2:-;2719:7;2902:4;2849:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2849:58:2;;;2839:69;;;;;;2832:76;;2650:265;;;:::o;609:1891::-;687:7;768:2;748:9;:16;:22;;744:72;;;802:1;786:19;;;;744:72;882:9;901;920:7;1166:4;1155:9;1151:20;1145:27;1140:32;;1211:4;1200:9;1196:20;1190:27;1185:32;;1264:4;1253:9;1249:20;1243:27;1240:1;1235:36;1230:41;;2182:66;2177:1;2169:10;;;:79;2165:127;;;2279:1;2264:17;;;;;;;2165:127;2311:2;2306:1;:7;;;;:18;;;;;2322:2;2317:1;:7;;;;2306:18;2302:66;;;2355:1;2340:17;;;;;;;2302:66;2469:24;2479:4;2485:1;2488;2491;2469:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2469:24:2;;;;;;;;2462:31;;;;;609:1891;;;;;:::o;1439:145:3:-;1497:7;1516:9;1532:1;1528;:5;1516:17;;1556:1;1551;:6;;1543:15;;;;;;;;1576:1;1569:8;;;1439:145;;;;:::o;13072:855:1:-;13147:4;13167:19;13189:1;13167:23;;13368:14;13450:3;13445:57;;;;13573:4;13568:220;;;;13361:516;;13445:57;13487:1;13472:16;;13445:57;;13568:220;13673:4;13668:3;13663;13648:30;13770:3;13764:10;13749:25;;13361:516;;13919:1;13904:11;:16;;13897:23;;;13072:855;:::o', + 'source': 'pragma solidity ^0.5.2;\n\n/*\n Super Simple Token Subscriptions - https://tokensubscription.com\n //// Breakin’ Through @ University of Wyoming ////\n Austin Thomas Griffith - https://austingriffith.com\n Building on previous works:\n https://github.com/austintgriffith/token-subscription\n https://gist.github.com/androolloyd/0a62ef48887be00a5eff5c17f2be849a\n https://media.consensys.net/subscription-services-on-the-blockchain-erc-948-6ef64b083a36\n https://medium.com/gitcoin/technical-deep-dive-architecture-choices-for-subscriptions-on-the-blockchain-erc948-5fae89cabc7a\n https://github.com/ethereum/EIPs/pull/1337\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1077.md\n https://github.com/gnosis/safe-contracts\n Earlier Meta Transaction Demo:\n https://github.com/austintgriffith/bouncer-proxy\n Huge thanks, as always, to OpenZeppelin for the rad contracts:\n */\n\nimport \\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\\";\nimport \\"openzeppelin-solidity/contracts/math/SafeMath.sol\\";\nimport \\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\\";\n\n\ncontract Subscription {\n using ECDSA for bytes32;\n using SafeMath for uint256;\n\n //who deploys the contract\n address payable public author;\n\n //restrict who can relay the metatx\n address public relayer;\n\n // the publisher may optionally deploy requirements for the subscription\n // so only meta transactions that match the requirements can be relayed\n address public requiredToAddress;\n address public requiredTokenAddress;\n uint256 public requiredTokenAmount;\n uint256 public requiredPeriodSeconds;\n uint256 public requiredGasPrice;\n\n\n // similar to a nonce that avoids replay attacks this allows a single execution\n // every x seconds for a given subscription\n // subscriptionHash => next valid block number\n mapping(bytes32 => uint256) public nextValidTimestamp;\n\n //well use a nonce for each from but because transactions can go through\n //multiple times, we allow anything but users can use this as a signal for\n //uniqueness\n mapping(address => uint256) public extraNonce;\n\n event ExecuteSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event CancelSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n constructor(\n address _toAddress,\n address _tokenAddress,\n uint256 _tokenAmount,\n uint256 _periodSeconds,\n uint256 _gasPrice,\n uint8 _version,\n address _relayer\n ) public {\n requiredToAddress=_toAddress;\n requiredTokenAddress=_tokenAddress;\n requiredTokenAmount=_tokenAmount;\n requiredPeriodSeconds=_periodSeconds;\n requiredGasPrice=_gasPrice;\n author=msg.sender;\n relayer=_relayer;\n }\n\n // this is used by external smart contracts to verify on-chain that a\n // particular subscription is \\"paid\\" and \\"active\\"\n // there must be a small grace period added to allow the publisher\n // or desktop miner to execute\n function isSubscriptionActive(\n bytes32 subscriptionHash,\n uint256 gracePeriodSeconds\n )\n external\n view\n returns (bool)\n {\n if(nextValidTimestamp[subscriptionHash]==uint256(-1)){\n return false;\n }\n return (block.timestamp <=\n nextValidTimestamp[subscriptionHash].add(gracePeriodSeconds)\n );\n }\n\n // given the subscription details, generate a hash and try to kind of follow\n // the eip-191 standard and eip-1077 standard from my dude @avsa\n function getSubscriptionHash(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n )\n public\n view\n returns (bytes32)\n {\n // if there are requirements from the deployer, let\"s make sure\n // those are met exactly\n require( requiredToAddress == address(0) || to == requiredToAddress, \\"requiredToAddress Failure\\" );\n require( requiredTokenAddress == address(0) || tokenAddress == requiredTokenAddress, \\"requiredTokenAddress Failure\\" );\n require( requiredTokenAmount == 0 || tokenAmount == requiredTokenAmount, \\"requiredTokenAmount Failure\\" );\n require( requiredPeriodSeconds == 0 || periodSeconds == requiredPeriodSeconds, \\"requiredPeriodSeconds Failure\\" );\n require( requiredGasPrice == 0 || gasPrice == requiredGasPrice, \\"requiredGasPrice Failure\\" );\n\n return keccak256(\n abi.encodePacked(\n byte(0x19),\n byte(0),\n address(this),\n from,\n to,\n tokenAddress,\n tokenAmount,\n periodSeconds,\n gasPrice\n ));\n }\n\n //ecrecover the signer from hash and the signature\n function getSubscriptionSigner(\n bytes32 subscriptionHash, //hash of subscription\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n pure\n returns (address)\n {\n return subscriptionHash.toEthSignedMessageHash().recover(signature);\n }\n\n //check if a subscription is signed correctly and the timestamp is ready for\n // the next execution to happen\n function isSubscriptionReady(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of the token to incentivize the relay network\n uint256 nonce,// to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n view\n returns (bool)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n uint256 allowance = ERC20(tokenAddress).allowance(from, address(this));\n uint256 balance = ERC20(tokenAddress).balanceOf(from);\n\n return (\n signer == from &&\n from != to &&\n block.timestamp >= nextValidTimestamp[subscriptionHash] &&\n allowance >= tokenAmount.add(gasPrice) &&\n balance >= tokenAmount.add(gasPrice)\n );\n }\n\n // you don\"t really need this if you are using the approve/transferFrom method\n // because you control the flow of tokens by approving this contract address,\n // but to make the contract an extensible example for later user I\"ll add this\n function cancelSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, //to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n\n //the signature must be valid\n require(signer == from, \\"Invalid Signature for subscription cancellation\\");\n\n //make sure it\"s the subscriber\n require(from == msg.sender, \"msg.sender is not the subscriber\");\n\n //nextValidTimestamp should be a timestamp that will never\n //be reached during the brief window human existence\n nextValidTimestamp[subscriptionHash]=uint256(-1);\n\n emit CancelSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n return true;\n }\n\n // execute the transferFrom to pay the publisher from the subscriber\n // the subscriber has full control by approving this contract an allowance\n function executeSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, // to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n require(msg.sender == relayer);\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // make sure the subscription is valid and ready\n require( isSubscriptionReady(from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce, signature), \\"Subscription is not ready or conditions of transction are not met\\" );\n\n //increment the timestamp by the period so it wont be valid until then\n nextValidTimestamp[subscriptionHash] = block.timestamp.add(periodSeconds);\n\n //check to see if this nonce is larger than the current count and we\"ll set that for this \"from\"\n if(nonce > extraNonce[from]){\n extraNonce[from] = nonce;\n }\n\n // now, let make the transfer from the subscriber to the publisher\n uint256 startingBalance = ERC20(tokenAddress).balanceOf(to);\n ERC20(tokenAddress).transferFrom(from,to,tokenAmount);\n require(\n (startingBalance+tokenAmount) == ERC20(tokenAddress).balanceOf(to),\n \\"ERC20 Balance did not change correctly\\"\n );\n\n require(\n checkSuccess(),\n \\"Subscription::executeSubscription TransferFrom failed\\"\n );\n\n\n emit ExecuteSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // it is possible for the subscription execution to be run by a third party\n // incentivized in the terms of the subscription with a gasPrice of the tokens\n // - pay that out now...\n if (gasPrice > 0) {\n //the relayer is incentivized by a little of the same token from\n // the subscriber ... as far as the subscriber knows, they are\n // just sending X tokens to the publisher, but the publisher can\n // choose to send Y of those X to a relayer to run their transactions\n // the publisher will receive X - Y tokens\n // this must all be setup in the constructor\n // if not, the subscriber chooses all the params including what goes\n // to the publisher and what goes to the relayer\n ERC20(tokenAddress).transferFrom(from, msg.sender, gasPrice);\n require(\n checkSuccess(),\n \\"Subscription::executeSubscription Failed to pay gas as from account\\"\n );\n }\n\n return true;\n }\n\n // because of issues with non-standard erc20s the transferFrom can always return false\n // to fix this we run it and then check the return of the previous function:\n // https://github.com/ethereum/solidity/issues/4116\n /**\n * Checks the return value of the previous function. Returns true if the previous function\n * function returned 32 non-zero bytes or returned zero bytes.\n */\n function checkSuccess(\n )\n private\n pure\n returns (bool)\n {\n uint256 returnValue = 0;\n\n /* solium-disable-next-line security/no-inline-assembly */\n assembly {\n // check number of bytes returned from last function call\n switch returndatasize\n\n // no bytes returned: assume success\n case 0x0 {\n returnValue := 1\n }\n\n // 32 bytes returned: check if non-zero\n case 0x20 {\n // copy 32 bytes into scratch space\n returndatacopy(0x0, 0x0, 0x20)\n\n // load those bytes into returnValue\n returnValue := mload(0x0)\n }\n\n // not sure what was returned: dont mark as success\n default { }\n }\n\n return returnValue != 0;\n }\n\n //we would like a way for the author to completly destroy the subscription\n // contract to prevent further transfers\n function endContract()\n external\n {\n require(msg.sender==author);\n selfdestruct(author);\n }\n\n // let\"s go ahead and revert any ETH sent directly to the contract\n function () external payable {\n revert ();\n }\n}\n', + 'sourcePath': '/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol', + 'ast': { + 'absolutePath': '/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol', + 'exportedSymbols': { + 'Subscription': [ + 675 + ] + }, + 'id': 676, + 'nodeType': 'SourceUnit', + 'nodes': [ + { + 'id': 58, + 'literals': [ + 'solidity', + '^', + '0.5', + '.2' + ], + 'nodeType': 'PragmaDirective', + 'src': '0:23:1' + }, + { + 'absolutePath': 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol', + 'file': 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol', + 'id': 59, + 'nodeType': 'ImportDirective', + 'scope': 676, + 'sourceUnit': 757, + 'src': '900:64:1', + 'symbolAliases': [], + 'unitAlias': '' + }, + { + 'absolutePath': 'openzeppelin-solidity/contracts/math/SafeMath.sol', + 'file': 'openzeppelin-solidity/contracts/math/SafeMath.sol', + 'id': 60, + 'nodeType': 'ImportDirective', + 'scope': 676, + 'sourceUnit': 885, + 'src': '965:59:1', + 'symbolAliases': [], + 'unitAlias': '' + }, + { + 'absolutePath': 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol', + 'file': 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol', + 'id': 61, + 'nodeType': 'ImportDirective', + 'scope': 676, + 'sourceUnit': 1268, + 'src': '1025:63:1', + 'symbolAliases': [], + 'unitAlias': '' + }, + { + 'baseContracts': [], + 'contractDependencies': [], + 'contractKind': 'contract', + 'documentation': null, + 'fullyImplemented': true, + 'id': 675, + 'linearizedBaseContracts': [ + 675 + ], + 'name': 'Subscription', + 'nodeType': 'ContractDefinition', + 'nodes': [ + { + 'id': 64, + 'libraryName': { + 'contractScope': null, + 'id': 62, + 'name': 'ECDSA', + 'nodeType': 'UserDefinedTypeName', + 'referencedDeclaration': 756, + 'src': '1125:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ECDSA_$756', + 'typeString': 'library ECDSA' + } + }, + 'nodeType': 'UsingForDirective', + 'src': '1119:24:1', + 'typeName': { + 'id': 63, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '1135:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + } + }, + { + 'id': 67, + 'libraryName': { + 'contractScope': null, + 'id': 65, + 'name': 'SafeMath', + 'nodeType': 'UserDefinedTypeName', + 'referencedDeclaration': 884, + 'src': '1154:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_SafeMath_$884', + 'typeString': 'library SafeMath' + } + }, + 'nodeType': 'UsingForDirective', + 'src': '1148:27:1', + 'typeName': { + 'id': 66, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1167:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + }, + { + 'constant': false, + 'id': 69, + 'name': 'author', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1212:29:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + 'typeName': { + 'id': 68, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1212:15:1', + 'stateMutability': 'payable', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 71, + 'name': 'relayer', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1288:22:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 70, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1288:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 73, + 'name': 'requiredToAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1470:32:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 72, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1470:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 75, + 'name': 'requiredTokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1508:35:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 74, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1508:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 77, + 'name': 'requiredTokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1549:34:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 76, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1549:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 79, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1589:36:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 78, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1589:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 81, + 'name': 'requiredGasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1631:31:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 80, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1631:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 85, + 'name': 'nextValidTimestamp', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1854:53:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + }, + 'typeName': { + 'id': 84, + 'keyType': { + 'id': 82, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '1862:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'Mapping', + 'src': '1854:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + }, + 'valueType': { + 'id': 83, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1873:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 89, + 'name': 'extraNonce', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '2088:45:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + }, + 'typeName': { + 'id': 88, + 'keyType': { + 'id': 86, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2096:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Mapping', + 'src': '2088:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + }, + 'valueType': { + 'id': 87, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2107:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'anonymous': false, + 'documentation': null, + 'id': 105, + 'name': 'ExecuteSubscription', + 'nodeType': 'EventDefinition', + 'parameters': { + 'id': 104, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 91, + 'indexed': true, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2175:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 90, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2175:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 93, + 'indexed': true, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2222:18:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 92, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2222:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 95, + 'indexed': false, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2266:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 94, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2266:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 97, + 'indexed': false, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2338:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 96, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2338:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 99, + 'indexed': false, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2408:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 98, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2408:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 101, + 'indexed': false, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2480:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 100, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2480:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 103, + 'indexed': false, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2557:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 102, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2557:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '2165:471:1' + }, + 'src': '2140:497:1' + }, + { + 'anonymous': false, + 'documentation': null, + 'id': 121, + 'name': 'CancelSubscription', + 'nodeType': 'EventDefinition', + 'parameters': { + 'id': 120, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 107, + 'indexed': true, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2677:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 106, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2677:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 109, + 'indexed': true, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2724:18:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 108, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2724:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 111, + 'indexed': false, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2768:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 110, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2768:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 113, + 'indexed': false, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2840:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 112, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2840:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 115, + 'indexed': false, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2910:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 114, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2910:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 117, + 'indexed': false, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2982:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 116, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2982:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 119, + 'indexed': false, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '3059:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 118, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3059:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '2667:471:1' + }, + 'src': '2643:496:1' + }, + { + 'body': { + 'id': 167, + 'nodeType': 'Block', + 'src': '3368:266:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'id': 140, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 138, + 'name': 'requiredToAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 73, + 'src': '3378:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 139, + 'name': '_toAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 123, + 'src': '3396:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '3378:28:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'id': 141, + 'nodeType': 'ExpressionStatement', + 'src': '3378:28:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 144, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 142, + 'name': 'requiredTokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 75, + 'src': '3416:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 143, + 'name': '_tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 125, + 'src': '3437:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '3416:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'id': 145, + 'nodeType': 'ExpressionStatement', + 'src': '3416:34:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 148, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 146, + 'name': 'requiredTokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 77, + 'src': '3460:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 147, + 'name': '_tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 127, + 'src': '3480:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '3460:32:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 149, + 'nodeType': 'ExpressionStatement', + 'src': '3460:32:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 152, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 150, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 79, + 'src': '3502:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 151, + 'name': '_periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 129, + 'src': '3524:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '3502:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 153, + 'nodeType': 'ExpressionStatement', + 'src': '3502:36:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 156, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 154, + 'name': 'requiredGasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 81, + 'src': '3548:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 155, + 'name': '_gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 131, + 'src': '3565:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '3548:26:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 157, + 'nodeType': 'ExpressionStatement', + 'src': '3548:26:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 161, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 158, + 'name': 'author', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3584:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 159, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '3591:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 160, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '3591:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '3584:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'id': 162, + 'nodeType': 'ExpressionStatement', + 'src': '3584:17:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 165, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 163, + 'name': 'relayer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 71, + 'src': '3611:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 164, + 'name': '_relayer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 135, + 'src': '3619:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '3611:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'id': 166, + 'nodeType': 'ExpressionStatement', + 'src': '3611:16:1' + } + ] + }, + 'documentation': null, + 'id': 168, + 'implemented': true, + 'kind': 'constructor', + 'modifiers': [], + 'name': '', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 136, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 123, + 'name': '_toAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3166:18:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 122, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3166:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 125, + 'name': '_tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3194:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 124, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3194:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 127, + 'name': '_tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3225:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 126, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3225:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 129, + 'name': '_periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3255:22:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 128, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3255:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 131, + 'name': '_gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3287:17:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 130, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3287:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 133, + 'name': '_version', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3314:14:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + }, + 'typeName': { + 'id': 132, + 'name': 'uint8', + 'nodeType': 'ElementaryTypeName', + 'src': '3314:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 135, + 'name': '_relayer', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3338:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 134, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3338:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3156:204:1' + }, + 'returnParameters': { + 'id': 137, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '3368:0:1' + }, + 'scope': 675, + 'src': '3145:489:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 200, + 'nodeType': 'Block', + 'src': '4037:227:1', + 'statements': [ + { + 'condition': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 184, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 177, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '4050:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 179, + 'indexExpression': { + 'argumentTypes': null, + 'id': 178, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 170, + 'src': '4069:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '4050:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 182, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'UnaryOperation', + 'operator': '-', + 'prefix': true, + 'src': '4096:2:1', + 'subExpression': { + 'argumentTypes': null, + 'hexValue': '31', + 'id': 181, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '4097:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_1_by_1', + 'typeString': 'int_const 1' + }, + 'value': '1' + }, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + ], + 'id': 180, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '4088:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_uint256_$', + 'typeString': 'type(uint256)' + }, + 'typeName': 'uint256' + }, + 'id': 183, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '4088:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '4050:49:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'falseBody': null, + 'id': 188, + 'nodeType': 'IfStatement', + 'src': '4047:88:1', + 'trueBody': { + 'id': 187, + 'nodeType': 'Block', + 'src': '4100:35:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'hexValue': '66616c7365', + 'id': 185, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'bool', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '4119:5:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'value': 'false' + }, + 'functionReturnParameters': 176, + 'id': 186, + 'nodeType': 'Return', + 'src': '4112:12:1' + } + ] + } + }, + { + 'expression': { + 'argumentTypes': null, + 'components': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 197, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 189, + 'name': 'block', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1341, + 'src': '4152:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_block', + 'typeString': 'block' + } + }, + 'id': 190, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'timestamp', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '4152:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '<=', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 195, + 'name': 'gracePeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 172, + 'src': '4228:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 191, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '4187:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 193, + 'indexExpression': { + 'argumentTypes': null, + 'id': 192, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 170, + 'src': '4206:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '4187:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 194, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '4187:40:1', + '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': 196, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '4187:60:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '4152:95:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'id': 198, + 'isConstant': false, + 'isInlineArray': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'TupleExpression', + 'src': '4151:106:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'functionReturnParameters': 176, + 'id': 199, + 'nodeType': 'Return', + 'src': '4144:113:1' + } + ] + }, + 'documentation': null, + 'id': 201, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'isSubscriptionActive', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 173, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 170, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 201, + 'src': '3913:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 169, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '3913:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 172, + 'name': 'gracePeriodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 201, + 'src': '3947:26:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 171, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3947:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3903:76:1' + }, + 'returnParameters': { + 'id': 176, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 175, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 201, + 'src': '4027:4:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 174, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '4027:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '4026:6:1' + }, + 'scope': 675, + 'src': '3874:390:1', + 'stateMutability': 'view', + 'superFunction': null, + 'visibility': 'external' + }, + { + 'body': { + 'id': 300, + 'nodeType': 'Block', + 'src': '4969:999:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 229, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 225, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 221, + 'name': 'requiredToAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 73, + 'src': '5093:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 223, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5122: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': 222, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5114:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 224, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5114:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '5093:31:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 228, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 226, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 205, + 'src': '5128:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 227, + 'name': 'requiredToAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 73, + 'src': '5134:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '5128:23:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5093:58:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564546f41646472657373204661696c757265', + 'id': 230, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5153:27:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430', + 'typeString': 'literal_string \'requiredToAddress Failure\'' + }, + 'value': 'requiredToAddress Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430', + 'typeString': 'literal_string \'requiredToAddress Failure\'' + } + ], + 'id': 220, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5084:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 231, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5084:98:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 232, + 'nodeType': 'ExpressionStatement', + 'src': '5084:98:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 242, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 238, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 234, + 'name': 'requiredTokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 75, + 'src': '5201:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 236, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5233: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': 235, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5225:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 237, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5225:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '5201:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 241, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 239, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 207, + 'src': '5239:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 240, + 'name': 'requiredTokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 75, + 'src': '5255:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '5239:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5201:74:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564546f6b656e41646472657373204661696c757265', + 'id': 243, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5277:30:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c', + 'typeString': 'literal_string \'requiredTokenAddress Failure\'' + }, + 'value': 'requiredTokenAddress Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c', + 'typeString': 'literal_string \'requiredTokenAddress Failure\'' + } + ], + 'id': 233, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5192:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 244, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5192:118:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 245, + 'nodeType': 'ExpressionStatement', + 'src': '5192:118:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 253, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 249, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 247, + 'name': 'requiredTokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 77, + 'src': '5329:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 248, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5352:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '5329:24:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 252, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 250, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 209, + 'src': '5357:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 251, + 'name': 'requiredTokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 77, + 'src': '5372:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '5357:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5329:62:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564546f6b656e416d6f756e74204661696c757265', + 'id': 254, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5393:29:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785', + 'typeString': 'literal_string \'requiredTokenAmount Failure\'' + }, + 'value': 'requiredTokenAmount Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785', + 'typeString': 'literal_string \'requiredTokenAmount Failure\'' + } + ], + 'id': 246, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5320:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 255, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5320:105:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 256, + 'nodeType': 'ExpressionStatement', + 'src': '5320:105:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 264, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 260, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 258, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 79, + 'src': '5444:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 259, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5469:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '5444:26:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 263, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 261, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 211, + 'src': '5474:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 262, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 79, + 'src': '5491:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '5474:38:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5444:68:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564506572696f645365636f6e6473204661696c757265', + 'id': 265, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5514:31:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b', + 'typeString': 'literal_string \'requiredPeriodSeconds Failure\'' + }, + 'value': 'requiredPeriodSeconds Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b', + 'typeString': 'literal_string \'requiredPeriodSeconds Failure\'' + } + ], + 'id': 257, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5435:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 266, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5435:113:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 267, + 'nodeType': 'ExpressionStatement', + 'src': '5435:113:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 275, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 271, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 269, + 'name': 'requiredGasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 81, + 'src': '5567:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 270, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5587:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '5567:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 274, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 272, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 213, + 'src': '5592:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 273, + 'name': 'requiredGasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 81, + 'src': '5604:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '5592:28:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5567:53:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '72657175697265644761735072696365204661696c757265', + 'id': 276, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5622:26:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb', + 'typeString': 'literal_string \'requiredGasPrice Failure\'' + }, + 'value': 'requiredGasPrice Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb', + 'typeString': 'literal_string \'requiredGasPrice Failure\'' + } + ], + 'id': 268, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5558:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 277, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5558:93:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 278, + 'nodeType': 'ExpressionStatement', + 'src': '5558:93:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30783139', + 'id': 283, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5731:4:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_25_by_1', + 'typeString': 'int_const 25' + }, + 'value': '0x19' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_rational_25_by_1', + 'typeString': 'int_const 25' + } + ], + 'id': 282, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5726:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_bytes1_$', + 'typeString': 'type(bytes1)' + }, + 'typeName': 'byte' + }, + 'id': 284, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5726:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + } + }, + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 286, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5759: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': 285, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5754:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_bytes1_$', + 'typeString': 'type(bytes1)' + }, + 'typeName': 'byte' + }, + 'id': 287, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5754:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + } + }, + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 289, + 'name': 'this', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1374, + 'src': '5787:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + ], + 'id': 288, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5779:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 290, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5779:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + { + 'argumentTypes': null, + 'id': 291, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 203, + 'src': '5810:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 292, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 205, + 'src': '5832:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 293, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 207, + 'src': '5852:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 294, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 209, + 'src': '5882:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 295, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 211, + 'src': '5911:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 296, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 213, + 'src': '5942:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + }, + { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + }, + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'id': 280, + 'name': 'abi', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1338, + 'src': '5692:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_abi', + 'typeString': 'abi' + } + }, + 'id': 281, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'memberName': 'encodePacked', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '5692:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$', + 'typeString': 'function () pure returns (bytes memory)' + } + }, + 'id': 297, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5692:268:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 279, + 'name': 'keccak256', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1345, + 'src': '5669:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$', + 'typeString': 'function (bytes memory) pure returns (bytes32)' + } + }, + 'id': 298, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5669:292:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'functionReturnParameters': 219, + 'id': 299, + 'nodeType': 'Return', + 'src': '5662:299:1' + } + ] + }, + 'documentation': null, + 'id': 301, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'getSubscriptionHash', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 216, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 203, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4458:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 202, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '4458:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 205, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4497:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 204, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '4497:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 207, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4533:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 206, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '4533:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 209, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4605:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 208, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4605:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 211, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4675:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 210, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4675:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 213, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4747:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 212, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4747:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 215, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4831:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 214, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4831:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '4448:462:1' + }, + 'returnParameters': { + 'id': 219, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 218, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4956:7:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 217, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '4956:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '4955:9:1' + }, + 'scope': 675, + 'src': '4420:1548:1', + 'stateMutability': 'view', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 317, + 'nodeType': 'Block', + 'src': '6263:84:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 314, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 305, + 'src': '6330:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'expression': { + 'argumentTypes': null, + 'id': 310, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 303, + 'src': '6280:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'id': 311, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'toEthSignedMessageHash', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 755, + 'src': '6280:39:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$', + 'typeString': 'function (bytes32) pure returns (bytes32)' + } + }, + 'id': 312, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '6280:41:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'id': 313, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'recover', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 739, + 'src': '6280:49:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$', + 'typeString': 'function (bytes32,bytes memory) pure returns (address)' + } + }, + 'id': 315, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '6280:60:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'functionReturnParameters': 309, + 'id': 316, + 'nodeType': 'Return', + 'src': '6273:67:1' + } + ] + }, + 'documentation': null, + 'id': 318, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'getSubscriptionSigner', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 306, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 303, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 318, + 'src': '6069:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 302, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '6069:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 305, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 318, + 'src': '6126:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 304, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '6126:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '6059:145:1' + }, + 'returnParameters': { + 'id': 309, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 308, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 318, + 'src': '6250:7:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 307, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6250:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '6249:9:1' + }, + 'scope': 675, + 'src': '6029:318:1', + 'stateMutability': 'pure', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 409, + 'nodeType': 'Block', + 'src': '7098:633:1', + 'statements': [ + { + 'assignments': [ + 340 + ], + 'declarations': [ + { + 'constant': false, + 'id': 340, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7108:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 339, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '7108:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 350, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 342, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7168:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 343, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 322, + 'src': '7174:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 344, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 324, + 'src': '7178:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 345, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 326, + 'src': '7192:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 346, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 328, + 'src': '7205:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 347, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 330, + 'src': '7220:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 348, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 332, + 'src': '7230:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 341, + 'name': 'getSubscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 301, + 'src': '7135:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' + } + }, + 'id': 349, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7135:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7108:137:1' + }, + { + 'assignments': [ + 352 + ], + 'declarations': [ + { + 'constant': false, + 'id': 352, + 'name': 'signer', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7255:14:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 351, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '7255:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 357, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 354, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 340, + 'src': '7294:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + { + 'argumentTypes': null, + 'id': 355, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 334, + 'src': '7312:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 353, + 'name': 'getSubscriptionSigner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 318, + 'src': '7272:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', + 'typeString': 'function (bytes32,bytes memory) pure returns (address)' + } + }, + 'id': 356, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7272:50:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7255:67:1' + }, + { + 'assignments': [ + 359 + ], + 'declarations': [ + { + 'constant': false, + 'id': 359, + 'name': 'allowance', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7332:17:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 358, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '7332:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 369, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 364, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7382:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 366, + 'name': 'this', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1374, + 'src': '7396:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + ], + 'id': 365, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '7388:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 367, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7388:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 361, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 324, + 'src': '7358:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 360, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '7352:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 362, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7352:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 363, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'allowance', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 941, + 'src': '7352:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address,address) view external returns (uint256)' + } + }, + 'id': 368, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7352:50:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7332:70:1' + }, + { + 'assignments': [ + 371 + ], + 'declarations': [ + { + 'constant': false, + 'id': 371, + 'name': 'balance', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7412:15:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 370, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '7412:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 378, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 376, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7460:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 373, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 324, + 'src': '7436:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 372, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '7430:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 374, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7430:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 375, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'balanceOf', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 925, + 'src': '7430:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address) view external returns (uint256)' + } + }, + 'id': 377, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7430:35:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7412:53:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'components': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 406, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 399, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 392, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 385, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 381, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 379, + 'name': 'signer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 352, + 'src': '7497:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 380, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7507:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '7497:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 384, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 382, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7527:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '!=', + 'rightExpression': { + 'argumentTypes': null, + 'id': 383, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 322, + 'src': '7535:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '7527:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:40:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 391, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 386, + 'name': 'block', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1341, + 'src': '7553:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_block', + 'typeString': 'block' + } + }, + 'id': 387, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'timestamp', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '7553:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>=', + 'rightExpression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 388, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '7572:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 390, + 'indexExpression': { + 'argumentTypes': null, + 'id': 389, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 340, + 'src': '7591:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '7572:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '7553:55:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:111:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 398, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 393, + 'name': 'allowance', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 359, + 'src': '7624:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>=', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 396, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 330, + 'src': '7653:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'id': 394, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 326, + 'src': '7637:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 395, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '7637:15:1', + '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': 397, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7637:25:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '7624:38:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:165:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 405, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 400, + 'name': 'balance', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 371, + 'src': '7678:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>=', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 403, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 330, + 'src': '7705:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'id': 401, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 326, + 'src': '7689:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 402, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '7689:15:1', + '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': 404, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7689:25:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '7678:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:217:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'id': 407, + 'isConstant': false, + 'isInlineArray': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'TupleExpression', + 'src': '7483:241:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'functionReturnParameters': 338, + 'id': 408, + 'nodeType': 'Return', + 'src': '7476:248:1' + } + ] + }, + 'documentation': null, + 'id': 410, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'isSubscriptionReady', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 335, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 320, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6508:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 319, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6508:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 322, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6547:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 321, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6547:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 324, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6583:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 323, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6583:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 326, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6655:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 325, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6655:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 328, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6725:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 327, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6725:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 330, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6797:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 329, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6797:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 332, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6882:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 331, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6882:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 334, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6964:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 333, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '6964:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '6498:544:1' + }, + 'returnParameters': { + 'id': 338, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 337, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '7088:4:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 336, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '7088:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '7087:6:1' + }, + 'scope': 675, + 'src': '6470:1261:1', + 'stateMutability': 'view', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 486, + 'nodeType': 'Block', + 'src': '8606:802:1', + 'statements': [ + { + 'assignments': [ + 432 + ], + 'declarations': [ + { + 'constant': false, + 'id': 432, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 486, + 'src': '8616:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 431, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '8616:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 442, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 434, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '8676:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 435, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 414, + 'src': '8682:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 436, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 416, + 'src': '8686:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 437, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 418, + 'src': '8700:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 438, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 420, + 'src': '8713:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 439, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 422, + 'src': '8728:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 440, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 424, + 'src': '8738:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 433, + 'name': 'getSubscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 301, + 'src': '8643:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' + } + }, + 'id': 441, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '8643:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '8616:137:1' + }, + { + 'assignments': [ + 444 + ], + 'declarations': [ + { + 'constant': false, + 'id': 444, + 'name': 'signer', + 'nodeType': 'VariableDeclaration', + 'scope': 486, + 'src': '8763:14:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 443, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8763:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 449, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 446, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 432, + 'src': '8802:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + { + 'argumentTypes': null, + 'id': 447, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 426, + 'src': '8820:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 445, + 'name': 'getSubscriptionSigner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 318, + 'src': '8780:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', + 'typeString': 'function (bytes32,bytes memory) pure returns (address)' + } + }, + 'id': 448, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '8780:50:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '8763:67:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 453, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 451, + 'name': 'signer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 444, + 'src': '8887:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 452, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '8897:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '8887:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e', + 'id': 454, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '8903:49:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b', + 'typeString': 'literal_string \'Invalid Signature for subscription cancellation\'' + }, + 'value': 'Invalid Signature for subscription cancellation' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b', + 'typeString': 'literal_string \'Invalid Signature for subscription cancellation\'' + } + ], + 'id': 450, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '8879:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 455, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '8879:74:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 456, + 'nodeType': 'ExpressionStatement', + 'src': '8879:74:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 461, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 458, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '9012:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 459, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '9020:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 460, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '9020:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '9012:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '6d73672e73656e646572206973206e6f74207468652073756273637269626572', + 'id': 462, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '9032:34:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79', + 'typeString': 'literal_string \'msg.sender is not the subscriber\'' + }, + 'value': 'msg.sender is not the subscriber' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79', + 'typeString': 'literal_string \'msg.sender is not the subscriber\'' + } + ], + 'id': 457, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '9004:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 463, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '9004:63:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 464, + 'nodeType': 'ExpressionStatement', + 'src': '9004:63:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 472, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 465, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '9206:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 467, + 'indexExpression': { + 'argumentTypes': null, + 'id': 466, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 432, + 'src': '9225:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': true, + 'nodeType': 'IndexAccess', + 'src': '9206:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 470, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'UnaryOperation', + 'operator': '-', + 'prefix': true, + 'src': '9251:2:1', + 'subExpression': { + 'argumentTypes': null, + 'hexValue': '31', + 'id': 469, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '9252:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_1_by_1', + 'typeString': 'int_const 1' + }, + 'value': '1' + }, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + ], + 'id': 468, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '9243:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_uint256_$', + 'typeString': 'type(uint256)' + }, + 'typeName': 'uint256' + }, + 'id': 471, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '9243:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '9206:48:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 473, + 'nodeType': 'ExpressionStatement', + 'src': '9206:48:1' + }, + { + 'eventCall': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 475, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '9302:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 476, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 414, + 'src': '9308:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 477, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 416, + 'src': '9312:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 478, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 418, + 'src': '9326:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 479, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 420, + 'src': '9339:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 480, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 422, + 'src': '9354:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 481, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 424, + 'src': '9364:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 474, + 'name': 'CancelSubscription', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 121, + 'src': '9270:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' + } + }, + 'id': 482, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '9270:109:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 483, + 'nodeType': 'EmitStatement', + 'src': '9265:114:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'hexValue': '74727565', + 'id': 484, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'bool', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '9397:4:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'value': 'true' + }, + 'functionReturnParameters': 430, + 'id': 485, + 'nodeType': 'Return', + 'src': '9390:11:1' + } + ] + }, + 'documentation': null, + 'id': 487, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'cancelSubscription', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 427, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 412, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8022:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 411, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8022:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 414, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8061:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 413, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8061:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 416, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8097:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 415, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8097:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 418, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8169:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 417, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8169:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 420, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8239:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 419, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8239:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 422, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8311:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 421, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8311:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 424, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8395:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 423, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8395:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 426, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8477:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 425, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '8477:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '8012:543:1' + }, + 'returnParameters': { + 'id': 430, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 429, + 'name': 'success', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8588:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 428, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '8588:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '8587:14:1' + }, + 'scope': 675, + 'src': '7985:1423:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 636, + 'nodeType': 'Block', + 'src': '10189:2468:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 512, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 509, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '10207:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 510, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '10207:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 511, + 'name': 'relayer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 71, + 'src': '10221:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '10207:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + ], + 'id': 508, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1354, + 'src': '10199:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', + 'typeString': 'function (bool) pure' + } + }, + 'id': 513, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10199:30:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 514, + 'nodeType': 'ExpressionStatement', + 'src': '10199:30:1' + }, + { + 'assignments': [ + 516 + ], + 'declarations': [ + { + 'constant': false, + 'id': 516, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 636, + 'src': '10239:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 515, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '10239:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 526, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 518, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10299:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 519, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '10305:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 520, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '10309:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 521, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '10323:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 522, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '10336:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 523, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '10351:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 524, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10361:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 517, + 'name': 'getSubscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 301, + 'src': '10266:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' + } + }, + 'id': 525, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10266:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '10239:137:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 529, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10473:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 530, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '10479:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 531, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '10483:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 532, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '10497:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 533, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '10510:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 534, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '10525:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 535, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10535:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 536, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 503, + 'src': '10542:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 528, + 'name': 'isSubscriptionReady', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 410, + 'src': '10453:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)' + } + }, + 'id': 537, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10453:99:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574', + 'id': 538, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '10554:67:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3', + 'typeString': 'literal_string \'Subscription is not ready or conditions of transction are not met\'' + }, + 'value': 'Subscription is not ready or conditions of transction are not met' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3', + 'typeString': 'literal_string \'Subscription is not ready or conditions of transction are not met\'' + } + ], + 'id': 527, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '10444:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 539, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10444:179:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 540, + 'nodeType': 'ExpressionStatement', + 'src': '10444:179:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 549, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 541, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '10713:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 543, + 'indexExpression': { + 'argumentTypes': null, + 'id': 542, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 516, + 'src': '10732:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': true, + 'nodeType': 'IndexAccess', + 'src': '10713:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 547, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '10772:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 544, + 'name': 'block', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1341, + 'src': '10752:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_block', + 'typeString': 'block' + } + }, + 'id': 545, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'timestamp', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '10752:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 546, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '10752:19:1', + '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': 548, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10752:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '10713:73:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 550, + 'nodeType': 'ExpressionStatement', + 'src': '10713:73:1' + }, + { + 'condition': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 555, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 551, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10905:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>', + 'rightExpression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 552, + 'name': 'extraNonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 89, + 'src': '10913:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + } + }, + 'id': 554, + 'indexExpression': { + 'argumentTypes': null, + 'id': 553, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10924:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '10913:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '10905:24:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'falseBody': null, + 'id': 563, + 'nodeType': 'IfStatement', + 'src': '10902:75:1', + 'trueBody': { + 'id': 562, + 'nodeType': 'Block', + 'src': '10930:47:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'id': 560, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 556, + 'name': 'extraNonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 89, + 'src': '10942:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + } + }, + 'id': 558, + 'indexExpression': { + 'argumentTypes': null, + 'id': 557, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10953:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': true, + 'nodeType': 'IndexAccess', + 'src': '10942:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 559, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10961:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '10942:24:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 561, + 'nodeType': 'ExpressionStatement', + 'src': '10942:24:1' + } + ] + } + }, + { + 'assignments': [ + 565 + ], + 'declarations': [ + { + 'constant': false, + 'id': 565, + 'name': 'startingBalance', + 'nodeType': 'VariableDeclaration', + 'scope': 636, + 'src': '11062:23:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 564, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '11062:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 572, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 570, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11118:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 567, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11094:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 566, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '11088:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 568, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11088:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 569, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'balanceOf', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 925, + 'src': '11088:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address) view external returns (uint256)' + } + }, + 'id': 571, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11088:33:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '11062:59:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 577, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '11164:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 578, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11169:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 579, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '11172:11:1', + '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, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 574, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11137:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 573, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '11131:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 575, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11131:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 576, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'transferFrom', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 1014, + 'src': '11131:32:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', + 'typeString': 'function (address,address,uint256) external returns (bool)' + } + }, + 'id': 580, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11131:53:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'id': 581, + 'nodeType': 'ExpressionStatement', + 'src': '11131:53:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 593, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'components': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 585, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 583, + 'name': 'startingBalance', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 565, + 'src': '11214:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '+', + 'rightExpression': { + 'argumentTypes': null, + 'id': 584, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '11230:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '11214:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'id': 586, + 'isConstant': false, + 'isInlineArray': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'TupleExpression', + 'src': '11213:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 591, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11276:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 588, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11252:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 587, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '11246:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 589, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11246:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 590, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'balanceOf', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 925, + 'src': '11246:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address) view external returns (uint256)' + } + }, + 'id': 592, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11246:33:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '11213:66:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79', + 'id': 594, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '11291:40:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7', + 'typeString': 'literal_string \'ERC20 Balance did not change correctly\'' + }, + 'value': 'ERC20 Balance did not change correctly' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7', + 'typeString': 'literal_string \'ERC20 Balance did not change correctly\'' + } + ], + 'id': 582, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '11194:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 595, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11194:147:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 596, + 'nodeType': 'ExpressionStatement', + 'src': '11194:147:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'id': 598, + 'name': 'checkSuccess', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 652, + 'src': '11371:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', + 'typeString': 'function () pure returns (bool)' + } + }, + 'id': 599, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11371:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564', + 'id': 600, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '11397:55:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28', + 'typeString': 'literal_string \'Subscription::executeSubscription TransferFrom failed\'' + }, + 'value': 'Subscription::executeSubscription TransferFrom failed' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28', + 'typeString': 'literal_string \'Subscription::executeSubscription TransferFrom failed\'' + } + ], + 'id': 597, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '11352:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 601, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11352:112:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 602, + 'nodeType': 'ExpressionStatement', + 'src': '11352:112:1' + }, + { + 'eventCall': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 604, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '11514:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 605, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11520:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 606, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11524:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 607, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '11538:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 608, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '11551:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 609, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '11566:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 610, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '11576:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 603, + 'name': 'ExecuteSubscription', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 105, + 'src': '11481:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' + } + }, + 'id': 611, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11481:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 612, + 'nodeType': 'EmitStatement', + 'src': '11476:115:1' + }, + { + 'condition': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 615, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 613, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '11811:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 614, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '11822:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '11811:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'falseBody': null, + 'id': 633, + 'nodeType': 'IfStatement', + 'src': '11807:822:1', + 'trueBody': { + 'id': 632, + 'nodeType': 'Block', + 'src': '11825:804:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 620, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '12437:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 621, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '12443:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 622, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '12443:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + { + 'argumentTypes': null, + 'id': 623, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '12455:8:1', + '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' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 617, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '12410:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 616, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '12404:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 618, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12404:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 619, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'transferFrom', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 1014, + 'src': '12404:32:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', + 'typeString': 'function (address,address,uint256) external returns (bool)' + } + }, + 'id': 624, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12404:60:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'id': 625, + 'nodeType': 'ExpressionStatement', + 'src': '12404:60:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'id': 627, + 'name': 'checkSuccess', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 652, + 'src': '12503:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', + 'typeString': 'function () pure returns (bool)' + } + }, + 'id': 628, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12503:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74', + 'id': 629, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '12535:69:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7', + 'typeString': 'literal_string \'Subscription::executeSubscription Failed to pay gas as from account\'' + }, + 'value': 'Subscription::executeSubscription Failed to pay gas as from account' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7', + 'typeString': 'literal_string \'Subscription::executeSubscription Failed to pay gas as from account\'' + } + ], + 'id': 626, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '12478:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 630, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12478:140:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 631, + 'nodeType': 'ExpressionStatement', + 'src': '12478:140:1' + } + ] + } + }, + { + 'expression': { + 'argumentTypes': null, + 'hexValue': '74727565', + 'id': 634, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'bool', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '12646:4:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'value': 'true' + }, + 'functionReturnParameters': 507, + 'id': 635, + 'nodeType': 'Return', + 'src': '12639:11:1' + } + ] + }, + 'documentation': null, + 'id': 637, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'executeSubscription', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 504, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 489, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9604:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 488, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '9604:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 491, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9643:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 490, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '9643:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 493, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9679:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 492, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '9679:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 495, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9751:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 494, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9751:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 497, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9821:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 496, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9821:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 499, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9893:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 498, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9893:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 501, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9977:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 500, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9977:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 503, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '10060:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 502, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '10060:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '9594:544:1' + }, + 'returnParameters': { + 'id': 507, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 506, + 'name': 'success', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '10171:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 505, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '10171:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '10170:14:1' + }, + 'scope': 675, + 'src': '9566:3091:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 651, + 'nodeType': 'Block', + 'src': '13157:770:1', + 'statements': [ + { + 'assignments': [ + 643 + ], + 'declarations': [ + { + 'constant': false, + 'id': 643, + 'name': 'returnValue', + 'nodeType': 'VariableDeclaration', + 'scope': 651, + 'src': '13167:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 642, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '13167:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 645, + 'initialValue': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 644, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '13189:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '13167:23:1' + }, + { + 'externalReferences': [ + { + 'returnValue': { + 'declaration': 643, + 'isOffset': false, + 'isSlot': false, + 'src': '13472:11:1', + 'valueSize': 1 + } + }, + { + 'returnValue': { + 'declaration': 643, + 'isOffset': false, + 'isSlot': false, + 'src': '13749:11:1', + 'valueSize': 1 + } + } + ], + 'id': 646, + 'nodeType': 'InlineAssembly', + 'operations': '{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}', + 'src': '13268:635:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 649, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 647, + 'name': 'returnValue', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 643, + 'src': '13904:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '!=', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 648, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '13919:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '13904:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'functionReturnParameters': 641, + 'id': 650, + 'nodeType': 'Return', + 'src': '13897:23:1' + } + ] + }, + 'documentation': 'Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.', + 'id': 652, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'checkSuccess', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 638, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '13093:7:1' + }, + 'returnParameters': { + 'id': 641, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 640, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 652, + 'src': '13147:4:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 639, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '13147:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '13146:6:1' + }, + 'scope': 675, + 'src': '13072:855:1', + 'stateMutability': 'pure', + 'superFunction': null, + 'visibility': 'private' + }, + { + 'body': { + 'id': 666, + 'nodeType': 'Block', + 'src': '14101:70:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + 'id': 659, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 656, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '14117:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 657, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '14117:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 658, + 'name': 'author', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '14129:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '14117:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + ], + 'id': 655, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1354, + 'src': '14109:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', + 'typeString': 'function (bool) pure' + } + }, + 'id': 660, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '14109:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 661, + 'nodeType': 'ExpressionStatement', + 'src': '14109:27:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 663, + 'name': 'author', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '14157:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + ], + 'id': 662, + 'name': 'selfdestruct', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1359, + 'src': '14144:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$', + 'typeString': 'function (address payable)' + } + }, + 'id': 664, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '14144:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 665, + 'nodeType': 'ExpressionStatement', + 'src': '14144:20:1' + } + ] + }, + 'documentation': null, + 'id': 667, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'endContract', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 653, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14077:2:1' + }, + 'returnParameters': { + 'id': 654, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14101:0:1' + }, + 'scope': 675, + 'src': '14057:114:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'external' + }, + { + 'body': { + 'id': 673, + 'nodeType': 'Block', + 'src': '14277:25:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'id': 670, + 'name': 'revert', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1356, + 1357 + ], + 'referencedDeclaration': 1356, + 'src': '14286:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_revert_pure$__$returns$__$', + 'typeString': 'function () pure' + } + }, + 'id': 671, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '14286:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 672, + 'nodeType': 'ExpressionStatement', + 'src': '14286:9:1' + } + ] + }, + 'documentation': null, + 'id': 674, + 'implemented': true, + 'kind': 'fallback', + 'modifiers': [], + 'name': '', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 668, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14257:2:1' + }, + 'returnParameters': { + 'id': 669, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14277:0:1' + }, + 'scope': 675, + 'src': '14248:54:1', + 'stateMutability': 'payable', + 'superFunction': null, + 'visibility': 'external' + } + ], + 'scope': 676, + 'src': '1091:13213:1' + } + ], + 'src': '0:14305:1' + }, + 'legacyAST': { + 'absolutePath': '/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol', + 'exportedSymbols': { + 'Subscription': [ + 675 + ] + }, + 'id': 676, + 'nodeType': 'SourceUnit', + 'nodes': [ + { + 'id': 58, + 'literals': [ + 'solidity', + '^', + '0.5', + '.2' + ], + 'nodeType': 'PragmaDirective', + 'src': '0:23:1' + }, + { + 'absolutePath': 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol', + 'file': 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol', + 'id': 59, + 'nodeType': 'ImportDirective', + 'scope': 676, + 'sourceUnit': 757, + 'src': '900:64:1', + 'symbolAliases': [], + 'unitAlias': '' + }, + { + 'absolutePath': 'openzeppelin-solidity/contracts/math/SafeMath.sol', + 'file': 'openzeppelin-solidity/contracts/math/SafeMath.sol', + 'id': 60, + 'nodeType': 'ImportDirective', + 'scope': 676, + 'sourceUnit': 885, + 'src': '965:59:1', + 'symbolAliases': [], + 'unitAlias': '' + }, + { + 'absolutePath': 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol', + 'file': 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol', + 'id': 61, + 'nodeType': 'ImportDirective', + 'scope': 676, + 'sourceUnit': 1268, + 'src': '1025:63:1', + 'symbolAliases': [], + 'unitAlias': '' + }, + { + 'baseContracts': [], + 'contractDependencies': [], + 'contractKind': 'contract', + 'documentation': null, + 'fullyImplemented': true, + 'id': 675, + 'linearizedBaseContracts': [ + 675 + ], + 'name': 'Subscription', + 'nodeType': 'ContractDefinition', + 'nodes': [ + { + 'id': 64, + 'libraryName': { + 'contractScope': null, + 'id': 62, + 'name': 'ECDSA', + 'nodeType': 'UserDefinedTypeName', + 'referencedDeclaration': 756, + 'src': '1125:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ECDSA_$756', + 'typeString': 'library ECDSA' + } + }, + 'nodeType': 'UsingForDirective', + 'src': '1119:24:1', + 'typeName': { + 'id': 63, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '1135:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + } + }, + { + 'id': 67, + 'libraryName': { + 'contractScope': null, + 'id': 65, + 'name': 'SafeMath', + 'nodeType': 'UserDefinedTypeName', + 'referencedDeclaration': 884, + 'src': '1154:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_SafeMath_$884', + 'typeString': 'library SafeMath' + } + }, + 'nodeType': 'UsingForDirective', + 'src': '1148:27:1', + 'typeName': { + 'id': 66, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1167:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + }, + { + 'constant': false, + 'id': 69, + 'name': 'author', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1212:29:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + 'typeName': { + 'id': 68, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1212:15:1', + 'stateMutability': 'payable', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 71, + 'name': 'relayer', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1288:22:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 70, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1288:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 73, + 'name': 'requiredToAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1470:32:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 72, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1470:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 75, + 'name': 'requiredTokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1508:35:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 74, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '1508:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 77, + 'name': 'requiredTokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1549:34:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 76, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1549:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 79, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1589:36:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 78, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1589:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 81, + 'name': 'requiredGasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1631:31:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 80, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1631:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 85, + 'name': 'nextValidTimestamp', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '1854:53:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + }, + 'typeName': { + 'id': 84, + 'keyType': { + 'id': 82, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '1862:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'Mapping', + 'src': '1854:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + }, + 'valueType': { + 'id': 83, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '1873:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 89, + 'name': 'extraNonce', + 'nodeType': 'VariableDeclaration', + 'scope': 675, + 'src': '2088:45:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + }, + 'typeName': { + 'id': 88, + 'keyType': { + 'id': 86, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2096:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Mapping', + 'src': '2088:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + }, + 'valueType': { + 'id': 87, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2107:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'anonymous': false, + 'documentation': null, + 'id': 105, + 'name': 'ExecuteSubscription', + 'nodeType': 'EventDefinition', + 'parameters': { + 'id': 104, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 91, + 'indexed': true, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2175:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 90, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2175:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 93, + 'indexed': true, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2222:18:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 92, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2222:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 95, + 'indexed': false, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2266:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 94, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2266:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 97, + 'indexed': false, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2338:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 96, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2338:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 99, + 'indexed': false, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2408:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 98, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2408:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 101, + 'indexed': false, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2480:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 100, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2480:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 103, + 'indexed': false, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 105, + 'src': '2557:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 102, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2557:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '2165:471:1' + }, + 'src': '2140:497:1' + }, + { + 'anonymous': false, + 'documentation': null, + 'id': 121, + 'name': 'CancelSubscription', + 'nodeType': 'EventDefinition', + 'parameters': { + 'id': 120, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 107, + 'indexed': true, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2677:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 106, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2677:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 109, + 'indexed': true, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2724:18:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 108, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2724:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 111, + 'indexed': false, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2768:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 110, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '2768:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 113, + 'indexed': false, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2840:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 112, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2840:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 115, + 'indexed': false, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2910:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 114, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2910:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 117, + 'indexed': false, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '2982:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 116, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '2982:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 119, + 'indexed': false, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 121, + 'src': '3059:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 118, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3059:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '2667:471:1' + }, + 'src': '2643:496:1' + }, + { + 'body': { + 'id': 167, + 'nodeType': 'Block', + 'src': '3368:266:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'id': 140, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 138, + 'name': 'requiredToAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 73, + 'src': '3378:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 139, + 'name': '_toAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 123, + 'src': '3396:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '3378:28:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'id': 141, + 'nodeType': 'ExpressionStatement', + 'src': '3378:28:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 144, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 142, + 'name': 'requiredTokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 75, + 'src': '3416:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 143, + 'name': '_tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 125, + 'src': '3437:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '3416:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'id': 145, + 'nodeType': 'ExpressionStatement', + 'src': '3416:34:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 148, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 146, + 'name': 'requiredTokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 77, + 'src': '3460:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 147, + 'name': '_tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 127, + 'src': '3480:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '3460:32:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 149, + 'nodeType': 'ExpressionStatement', + 'src': '3460:32:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 152, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 150, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 79, + 'src': '3502:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 151, + 'name': '_periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 129, + 'src': '3524:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '3502:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 153, + 'nodeType': 'ExpressionStatement', + 'src': '3502:36:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 156, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 154, + 'name': 'requiredGasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 81, + 'src': '3548:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 155, + 'name': '_gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 131, + 'src': '3565:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '3548:26:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 157, + 'nodeType': 'ExpressionStatement', + 'src': '3548:26:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 161, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 158, + 'name': 'author', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3584:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 159, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '3591:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 160, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '3591:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '3584:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'id': 162, + 'nodeType': 'ExpressionStatement', + 'src': '3584:17:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 165, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 163, + 'name': 'relayer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 71, + 'src': '3611:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 164, + 'name': '_relayer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 135, + 'src': '3619:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '3611:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'id': 166, + 'nodeType': 'ExpressionStatement', + 'src': '3611:16:1' + } + ] + }, + 'documentation': null, + 'id': 168, + 'implemented': true, + 'kind': 'constructor', + 'modifiers': [], + 'name': '', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 136, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 123, + 'name': '_toAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3166:18:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 122, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3166:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 125, + 'name': '_tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3194:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 124, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3194:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 127, + 'name': '_tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3225:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 126, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3225:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 129, + 'name': '_periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3255:22:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 128, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3255:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 131, + 'name': '_gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3287:17:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 130, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3287:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 133, + 'name': '_version', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3314:14:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + }, + 'typeName': { + 'id': 132, + 'name': 'uint8', + 'nodeType': 'ElementaryTypeName', + 'src': '3314:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 135, + 'name': '_relayer', + 'nodeType': 'VariableDeclaration', + 'scope': 168, + 'src': '3338:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 134, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3338:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3156:204:1' + }, + 'returnParameters': { + 'id': 137, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '3368:0:1' + }, + 'scope': 675, + 'src': '3145:489:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 200, + 'nodeType': 'Block', + 'src': '4037:227:1', + 'statements': [ + { + 'condition': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 184, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 177, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '4050:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 179, + 'indexExpression': { + 'argumentTypes': null, + 'id': 178, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 170, + 'src': '4069:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '4050:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 182, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'UnaryOperation', + 'operator': '-', + 'prefix': true, + 'src': '4096:2:1', + 'subExpression': { + 'argumentTypes': null, + 'hexValue': '31', + 'id': 181, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '4097:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_1_by_1', + 'typeString': 'int_const 1' + }, + 'value': '1' + }, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + ], + 'id': 180, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '4088:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_uint256_$', + 'typeString': 'type(uint256)' + }, + 'typeName': 'uint256' + }, + 'id': 183, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '4088:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '4050:49:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'falseBody': null, + 'id': 188, + 'nodeType': 'IfStatement', + 'src': '4047:88:1', + 'trueBody': { + 'id': 187, + 'nodeType': 'Block', + 'src': '4100:35:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'hexValue': '66616c7365', + 'id': 185, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'bool', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '4119:5:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'value': 'false' + }, + 'functionReturnParameters': 176, + 'id': 186, + 'nodeType': 'Return', + 'src': '4112:12:1' + } + ] + } + }, + { + 'expression': { + 'argumentTypes': null, + 'components': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 197, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 189, + 'name': 'block', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1341, + 'src': '4152:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_block', + 'typeString': 'block' + } + }, + 'id': 190, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'timestamp', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '4152:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '<=', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 195, + 'name': 'gracePeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 172, + 'src': '4228:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 191, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '4187:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 193, + 'indexExpression': { + 'argumentTypes': null, + 'id': 192, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 170, + 'src': '4206:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '4187:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 194, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '4187:40:1', + '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': 196, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '4187:60:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '4152:95:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'id': 198, + 'isConstant': false, + 'isInlineArray': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'TupleExpression', + 'src': '4151:106:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'functionReturnParameters': 176, + 'id': 199, + 'nodeType': 'Return', + 'src': '4144:113:1' + } + ] + }, + 'documentation': null, + 'id': 201, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'isSubscriptionActive', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 173, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 170, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 201, + 'src': '3913:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 169, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '3913:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 172, + 'name': 'gracePeriodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 201, + 'src': '3947:26:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 171, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '3947:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3903:76:1' + }, + 'returnParameters': { + 'id': 176, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 175, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 201, + 'src': '4027:4:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 174, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '4027:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '4026:6:1' + }, + 'scope': 675, + 'src': '3874:390:1', + 'stateMutability': 'view', + 'superFunction': null, + 'visibility': 'external' + }, + { + 'body': { + 'id': 300, + 'nodeType': 'Block', + 'src': '4969:999:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 229, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 225, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 221, + 'name': 'requiredToAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 73, + 'src': '5093:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 223, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5122: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': 222, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5114:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 224, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5114:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '5093:31:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 228, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 226, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 205, + 'src': '5128:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 227, + 'name': 'requiredToAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 73, + 'src': '5134:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '5128:23:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5093:58:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564546f41646472657373204661696c757265', + 'id': 230, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5153:27:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430', + 'typeString': 'literal_string \'requiredToAddress Failure\'' + }, + 'value': 'requiredToAddress Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430', + 'typeString': 'literal_string \'requiredToAddress Failure\'' + } + ], + 'id': 220, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5084:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 231, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5084:98:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 232, + 'nodeType': 'ExpressionStatement', + 'src': '5084:98:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 242, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 238, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 234, + 'name': 'requiredTokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 75, + 'src': '5201:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 236, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5233: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': 235, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5225:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 237, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5225:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '5201:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 241, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 239, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 207, + 'src': '5239:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 240, + 'name': 'requiredTokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 75, + 'src': '5255:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '5239:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5201:74:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564546f6b656e41646472657373204661696c757265', + 'id': 243, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5277:30:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c', + 'typeString': 'literal_string \'requiredTokenAddress Failure\'' + }, + 'value': 'requiredTokenAddress Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c', + 'typeString': 'literal_string \'requiredTokenAddress Failure\'' + } + ], + 'id': 233, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5192:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 244, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5192:118:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 245, + 'nodeType': 'ExpressionStatement', + 'src': '5192:118:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 253, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 249, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 247, + 'name': 'requiredTokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 77, + 'src': '5329:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 248, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5352:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '5329:24:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 252, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 250, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 209, + 'src': '5357:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 251, + 'name': 'requiredTokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 77, + 'src': '5372:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '5357:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5329:62:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564546f6b656e416d6f756e74204661696c757265', + 'id': 254, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5393:29:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785', + 'typeString': 'literal_string \'requiredTokenAmount Failure\'' + }, + 'value': 'requiredTokenAmount Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785', + 'typeString': 'literal_string \'requiredTokenAmount Failure\'' + } + ], + 'id': 246, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5320:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 255, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5320:105:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 256, + 'nodeType': 'ExpressionStatement', + 'src': '5320:105:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 264, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 260, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 258, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 79, + 'src': '5444:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 259, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5469:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '5444:26:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 263, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 261, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 211, + 'src': '5474:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 262, + 'name': 'requiredPeriodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 79, + 'src': '5491:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '5474:38:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5444:68:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '7265717569726564506572696f645365636f6e6473204661696c757265', + 'id': 265, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5514:31:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b', + 'typeString': 'literal_string \'requiredPeriodSeconds Failure\'' + }, + 'value': 'requiredPeriodSeconds Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b', + 'typeString': 'literal_string \'requiredPeriodSeconds Failure\'' + } + ], + 'id': 257, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5435:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 266, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5435:113:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 267, + 'nodeType': 'ExpressionStatement', + 'src': '5435:113:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 275, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 271, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 269, + 'name': 'requiredGasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 81, + 'src': '5567:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 270, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5587:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '5567:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '||', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 274, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 272, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 213, + 'src': '5592:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 273, + 'name': 'requiredGasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 81, + 'src': '5604:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '5592:28:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '5567:53:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '72657175697265644761735072696365204661696c757265', + 'id': 276, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5622:26:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb', + 'typeString': 'literal_string \'requiredGasPrice Failure\'' + }, + 'value': 'requiredGasPrice Failure' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb', + 'typeString': 'literal_string \'requiredGasPrice Failure\'' + } + ], + 'id': 268, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '5558:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 277, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5558:93:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 278, + 'nodeType': 'ExpressionStatement', + 'src': '5558:93:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30783139', + 'id': 283, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5731:4:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_25_by_1', + 'typeString': 'int_const 25' + }, + 'value': '0x19' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_rational_25_by_1', + 'typeString': 'int_const 25' + } + ], + 'id': 282, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5726:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_bytes1_$', + 'typeString': 'type(bytes1)' + }, + 'typeName': 'byte' + }, + 'id': 284, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5726:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + } + }, + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 286, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '5759: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': 285, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5754:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_bytes1_$', + 'typeString': 'type(bytes1)' + }, + 'typeName': 'byte' + }, + 'id': 287, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5754:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + } + }, + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 289, + 'name': 'this', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1374, + 'src': '5787:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + ], + 'id': 288, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '5779:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 290, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5779:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + { + 'argumentTypes': null, + 'id': 291, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 203, + 'src': '5810:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 292, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 205, + 'src': '5832:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 293, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 207, + 'src': '5852:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 294, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 209, + 'src': '5882:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 295, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 211, + 'src': '5911:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 296, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 213, + 'src': '5942:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + }, + { + 'typeIdentifier': 't_bytes1', + 'typeString': 'bytes1' + }, + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'id': 280, + 'name': 'abi', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1338, + 'src': '5692:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_abi', + 'typeString': 'abi' + } + }, + 'id': 281, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'memberName': 'encodePacked', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '5692:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$', + 'typeString': 'function () pure returns (bytes memory)' + } + }, + 'id': 297, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5692:268:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 279, + 'name': 'keccak256', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1345, + 'src': '5669:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$', + 'typeString': 'function (bytes memory) pure returns (bytes32)' + } + }, + 'id': 298, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '5669:292:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'functionReturnParameters': 219, + 'id': 299, + 'nodeType': 'Return', + 'src': '5662:299:1' + } + ] + }, + 'documentation': null, + 'id': 301, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'getSubscriptionHash', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 216, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 203, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4458:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 202, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '4458:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 205, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4497:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 204, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '4497:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 207, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4533:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 206, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '4533:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 209, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4605:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 208, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4605:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 211, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4675:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 210, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4675:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 213, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4747:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 212, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4747:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 215, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4831:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 214, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '4831:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '4448:462:1' + }, + 'returnParameters': { + 'id': 219, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 218, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 301, + 'src': '4956:7:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 217, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '4956:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '4955:9:1' + }, + 'scope': 675, + 'src': '4420:1548:1', + 'stateMutability': 'view', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 317, + 'nodeType': 'Block', + 'src': '6263:84:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 314, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 305, + 'src': '6330:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'expression': { + 'argumentTypes': null, + 'id': 310, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 303, + 'src': '6280:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'id': 311, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'toEthSignedMessageHash', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 755, + 'src': '6280:39:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$', + 'typeString': 'function (bytes32) pure returns (bytes32)' + } + }, + 'id': 312, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '6280:41:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'id': 313, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'recover', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 739, + 'src': '6280:49:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$', + 'typeString': 'function (bytes32,bytes memory) pure returns (address)' + } + }, + 'id': 315, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '6280:60:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'functionReturnParameters': 309, + 'id': 316, + 'nodeType': 'Return', + 'src': '6273:67:1' + } + ] + }, + 'documentation': null, + 'id': 318, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'getSubscriptionSigner', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 306, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 303, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 318, + 'src': '6069:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 302, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '6069:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 305, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 318, + 'src': '6126:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 304, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '6126:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '6059:145:1' + }, + 'returnParameters': { + 'id': 309, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 308, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 318, + 'src': '6250:7:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 307, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6250:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '6249:9:1' + }, + 'scope': 675, + 'src': '6029:318:1', + 'stateMutability': 'pure', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 409, + 'nodeType': 'Block', + 'src': '7098:633:1', + 'statements': [ + { + 'assignments': [ + 340 + ], + 'declarations': [ + { + 'constant': false, + 'id': 340, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7108:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 339, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '7108:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 350, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 342, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7168:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 343, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 322, + 'src': '7174:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 344, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 324, + 'src': '7178:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 345, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 326, + 'src': '7192:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 346, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 328, + 'src': '7205:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 347, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 330, + 'src': '7220:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 348, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 332, + 'src': '7230:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 341, + 'name': 'getSubscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 301, + 'src': '7135:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' + } + }, + 'id': 349, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7135:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7108:137:1' + }, + { + 'assignments': [ + 352 + ], + 'declarations': [ + { + 'constant': false, + 'id': 352, + 'name': 'signer', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7255:14:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 351, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '7255:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 357, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 354, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 340, + 'src': '7294:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + { + 'argumentTypes': null, + 'id': 355, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 334, + 'src': '7312:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 353, + 'name': 'getSubscriptionSigner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 318, + 'src': '7272:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', + 'typeString': 'function (bytes32,bytes memory) pure returns (address)' + } + }, + 'id': 356, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7272:50:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7255:67:1' + }, + { + 'assignments': [ + 359 + ], + 'declarations': [ + { + 'constant': false, + 'id': 359, + 'name': 'allowance', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7332:17:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 358, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '7332:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 369, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 364, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7382:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 366, + 'name': 'this', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1374, + 'src': '7396:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeString': 'contract Subscription' + } + ], + 'id': 365, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '7388:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_address_$', + 'typeString': 'type(address)' + }, + 'typeName': 'address' + }, + 'id': 367, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7388:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 361, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 324, + 'src': '7358:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 360, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '7352:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 362, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7352:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 363, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'allowance', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 941, + 'src': '7352:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address,address) view external returns (uint256)' + } + }, + 'id': 368, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7352:50:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7332:70:1' + }, + { + 'assignments': [ + 371 + ], + 'declarations': [ + { + 'constant': false, + 'id': 371, + 'name': 'balance', + 'nodeType': 'VariableDeclaration', + 'scope': 409, + 'src': '7412:15:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 370, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '7412:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 378, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 376, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7460:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 373, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 324, + 'src': '7436:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 372, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '7430:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 374, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7430:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 375, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'balanceOf', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 925, + 'src': '7430:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address) view external returns (uint256)' + } + }, + 'id': 377, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7430:35:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '7412:53:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'components': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 406, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 399, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 392, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'id': 385, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 381, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 379, + 'name': 'signer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 352, + 'src': '7497:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 380, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7507:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '7497:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 384, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 382, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 320, + 'src': '7527:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '!=', + 'rightExpression': { + 'argumentTypes': null, + 'id': 383, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 322, + 'src': '7535:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '7527:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:40:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 391, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 386, + 'name': 'block', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1341, + 'src': '7553:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_block', + 'typeString': 'block' + } + }, + 'id': 387, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'timestamp', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '7553:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>=', + 'rightExpression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 388, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '7572:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 390, + 'indexExpression': { + 'argumentTypes': null, + 'id': 389, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 340, + 'src': '7591:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '7572:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '7553:55:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:111:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 398, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 393, + 'name': 'allowance', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 359, + 'src': '7624:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>=', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 396, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 330, + 'src': '7653:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'id': 394, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 326, + 'src': '7637:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 395, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '7637:15:1', + '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': 397, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7637:25:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '7624:38:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:165:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '&&', + 'rightExpression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 405, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 400, + 'name': 'balance', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 371, + 'src': '7678:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>=', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 403, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 330, + 'src': '7705:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'id': 401, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 326, + 'src': '7689:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 402, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '7689:15:1', + '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': 404, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '7689:25:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '7678:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'src': '7497:217:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'id': 407, + 'isConstant': false, + 'isInlineArray': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'TupleExpression', + 'src': '7483:241:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'functionReturnParameters': 338, + 'id': 408, + 'nodeType': 'Return', + 'src': '7476:248:1' + } + ] + }, + 'documentation': null, + 'id': 410, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'isSubscriptionReady', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 335, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 320, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6508:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 319, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6508:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 322, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6547:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 321, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6547:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 324, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6583:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 323, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '6583:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 326, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6655:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 325, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6655:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 328, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6725:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 327, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6725:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 330, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6797:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 329, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6797:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 332, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6882:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 331, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '6882:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 334, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '6964:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 333, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '6964:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '6498:544:1' + }, + 'returnParameters': { + 'id': 338, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 337, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 410, + 'src': '7088:4:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 336, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '7088:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '7087:6:1' + }, + 'scope': 675, + 'src': '6470:1261:1', + 'stateMutability': 'view', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 486, + 'nodeType': 'Block', + 'src': '8606:802:1', + 'statements': [ + { + 'assignments': [ + 432 + ], + 'declarations': [ + { + 'constant': false, + 'id': 432, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 486, + 'src': '8616:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 431, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '8616:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 442, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 434, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '8676:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 435, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 414, + 'src': '8682:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 436, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 416, + 'src': '8686:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 437, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 418, + 'src': '8700:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 438, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 420, + 'src': '8713:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 439, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 422, + 'src': '8728:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 440, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 424, + 'src': '8738:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 433, + 'name': 'getSubscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 301, + 'src': '8643:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' + } + }, + 'id': 441, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '8643:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '8616:137:1' + }, + { + 'assignments': [ + 444 + ], + 'declarations': [ + { + 'constant': false, + 'id': 444, + 'name': 'signer', + 'nodeType': 'VariableDeclaration', + 'scope': 486, + 'src': '8763:14:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 443, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8763:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 449, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 446, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 432, + 'src': '8802:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + { + 'argumentTypes': null, + 'id': 447, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 426, + 'src': '8820:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 445, + 'name': 'getSubscriptionSigner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 318, + 'src': '8780:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', + 'typeString': 'function (bytes32,bytes memory) pure returns (address)' + } + }, + 'id': 448, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '8780:50:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '8763:67:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 453, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 451, + 'name': 'signer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 444, + 'src': '8887:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 452, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '8897:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '8887:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e', + 'id': 454, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '8903:49:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b', + 'typeString': 'literal_string \'Invalid Signature for subscription cancellation\'' + }, + 'value': 'Invalid Signature for subscription cancellation' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b', + 'typeString': 'literal_string \'Invalid Signature for subscription cancellation\'' + } + ], + 'id': 450, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '8879:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 455, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '8879:74:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 456, + 'nodeType': 'ExpressionStatement', + 'src': '8879:74:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 461, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 458, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '9012:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 459, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '9020:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 460, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '9020:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '9012:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '6d73672e73656e646572206973206e6f74207468652073756273637269626572', + 'id': 462, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '9032:34:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79', + 'typeString': 'literal_string \'msg.sender is not the subscriber\'' + }, + 'value': 'msg.sender is not the subscriber' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79', + 'typeString': 'literal_string \'msg.sender is not the subscriber\'' + } + ], + 'id': 457, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '9004:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 463, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '9004:63:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 464, + 'nodeType': 'ExpressionStatement', + 'src': '9004:63:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 472, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 465, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '9206:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 467, + 'indexExpression': { + 'argumentTypes': null, + 'id': 466, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 432, + 'src': '9225:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': true, + 'nodeType': 'IndexAccess', + 'src': '9206:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 470, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'UnaryOperation', + 'operator': '-', + 'prefix': true, + 'src': '9251:2:1', + 'subExpression': { + 'argumentTypes': null, + 'hexValue': '31', + 'id': 469, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '9252:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_1_by_1', + 'typeString': 'int_const 1' + }, + 'value': '1' + }, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_rational_minus_1_by_1', + 'typeString': 'int_const -1' + } + ], + 'id': 468, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'lValueRequested': false, + 'nodeType': 'ElementaryTypeNameExpression', + 'src': '9243:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_uint256_$', + 'typeString': 'type(uint256)' + }, + 'typeName': 'uint256' + }, + 'id': 471, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '9243:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '9206:48:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 473, + 'nodeType': 'ExpressionStatement', + 'src': '9206:48:1' + }, + { + 'eventCall': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 475, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 412, + 'src': '9302:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 476, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 414, + 'src': '9308:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 477, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 416, + 'src': '9312:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 478, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 418, + 'src': '9326:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 479, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 420, + 'src': '9339:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 480, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 422, + 'src': '9354:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 481, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 424, + 'src': '9364:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 474, + 'name': 'CancelSubscription', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 121, + 'src': '9270:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' + } + }, + 'id': 482, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '9270:109:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 483, + 'nodeType': 'EmitStatement', + 'src': '9265:114:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'hexValue': '74727565', + 'id': 484, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'bool', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '9397:4:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'value': 'true' + }, + 'functionReturnParameters': 430, + 'id': 485, + 'nodeType': 'Return', + 'src': '9390:11:1' + } + ] + }, + 'documentation': null, + 'id': 487, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'cancelSubscription', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 427, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 412, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8022:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 411, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8022:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 414, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8061:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 413, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8061:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 416, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8097:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 415, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '8097:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 418, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8169:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 417, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8169:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 420, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8239:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 419, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8239:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 422, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8311:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 421, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8311:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 424, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8395:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 423, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '8395:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 426, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8477:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 425, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '8477:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '8012:543:1' + }, + 'returnParameters': { + 'id': 430, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 429, + 'name': 'success', + 'nodeType': 'VariableDeclaration', + 'scope': 487, + 'src': '8588:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 428, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '8588:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '8587:14:1' + }, + 'scope': 675, + 'src': '7985:1423:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 636, + 'nodeType': 'Block', + 'src': '10189:2468:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'id': 512, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 509, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '10207:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 510, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '10207:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 511, + 'name': 'relayer', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 71, + 'src': '10221:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'src': '10207:21:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + ], + 'id': 508, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1354, + 'src': '10199:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', + 'typeString': 'function (bool) pure' + } + }, + 'id': 513, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10199:30:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 514, + 'nodeType': 'ExpressionStatement', + 'src': '10199:30:1' + }, + { + 'assignments': [ + 516 + ], + 'declarations': [ + { + 'constant': false, + 'id': 516, + 'name': 'subscriptionHash', + 'nodeType': 'VariableDeclaration', + 'scope': 636, + 'src': '10239:24:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + }, + 'typeName': { + 'id': 515, + 'name': 'bytes32', + 'nodeType': 'ElementaryTypeName', + 'src': '10239:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 526, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 518, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10299:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 519, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '10305:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 520, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '10309:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 521, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '10323:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 522, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '10336:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 523, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '10351:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 524, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10361:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 517, + 'name': 'getSubscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 301, + 'src': '10266:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' + } + }, + 'id': 525, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10266:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '10239:137:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 529, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10473:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 530, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '10479:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 531, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '10483:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 532, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '10497:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 533, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '10510:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 534, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '10525:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 535, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10535:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 536, + 'name': 'signature', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 503, + 'src': '10542:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes memory' + } + ], + 'id': 528, + 'name': 'isSubscriptionReady', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 410, + 'src': '10453:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)' + } + }, + 'id': 537, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10453:99:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574', + 'id': 538, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '10554:67:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3', + 'typeString': 'literal_string \'Subscription is not ready or conditions of transction are not met\'' + }, + 'value': 'Subscription is not ready or conditions of transction are not met' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3', + 'typeString': 'literal_string \'Subscription is not ready or conditions of transction are not met\'' + } + ], + 'id': 527, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '10444:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 539, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10444:179:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 540, + 'nodeType': 'ExpressionStatement', + 'src': '10444:179:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 549, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 541, + 'name': 'nextValidTimestamp', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 85, + 'src': '10713:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', + 'typeString': 'mapping(bytes32 => uint256)' + } + }, + 'id': 543, + 'indexExpression': { + 'argumentTypes': null, + 'id': 542, + 'name': 'subscriptionHash', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 516, + 'src': '10732:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes32', + 'typeString': 'bytes32' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': true, + 'nodeType': 'IndexAccess', + 'src': '10713:36:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 547, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '10772:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'expression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 544, + 'name': 'block', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1341, + 'src': '10752:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_block', + 'typeString': 'block' + } + }, + 'id': 545, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'timestamp', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '10752:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 546, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'add', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 863, + 'src': '10752:19:1', + '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': 548, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '10752:34:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '10713:73:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 550, + 'nodeType': 'ExpressionStatement', + 'src': '10713:73:1' + }, + { + 'condition': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 555, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 551, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10905:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>', + 'rightExpression': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 552, + 'name': 'extraNonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 89, + 'src': '10913:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + } + }, + 'id': 554, + 'indexExpression': { + 'argumentTypes': null, + 'id': 553, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10924:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'IndexAccess', + 'src': '10913:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '10905:24:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'falseBody': null, + 'id': 563, + 'nodeType': 'IfStatement', + 'src': '10902:75:1', + 'trueBody': { + 'id': 562, + 'nodeType': 'Block', + 'src': '10930:47:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'id': 560, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'baseExpression': { + 'argumentTypes': null, + 'id': 556, + 'name': 'extraNonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 89, + 'src': '10942:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', + 'typeString': 'mapping(address => uint256)' + } + }, + 'id': 558, + 'indexExpression': { + 'argumentTypes': null, + 'id': 557, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '10953:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'isConstant': false, + 'isLValue': true, + 'isPure': false, + 'lValueRequested': true, + 'nodeType': 'IndexAccess', + 'src': '10942:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 559, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '10961:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '10942:24:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'id': 561, + 'nodeType': 'ExpressionStatement', + 'src': '10942:24:1' + } + ] + } + }, + { + 'assignments': [ + 565 + ], + 'declarations': [ + { + 'constant': false, + 'id': 565, + 'name': 'startingBalance', + 'nodeType': 'VariableDeclaration', + 'scope': 636, + 'src': '11062:23:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 564, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '11062:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 572, + 'initialValue': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 570, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11118:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 567, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11094:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 566, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '11088:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 568, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11088:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 569, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'balanceOf', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 925, + 'src': '11088:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address) view external returns (uint256)' + } + }, + 'id': 571, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11088:33:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '11062:59:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 577, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '11164:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 578, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11169:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 579, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '11172:11:1', + '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, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 574, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11137:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 573, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '11131:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 575, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11131:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 576, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'transferFrom', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 1014, + 'src': '11131:32:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', + 'typeString': 'function (address,address,uint256) external returns (bool)' + } + }, + 'id': 580, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11131:53:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'id': 581, + 'nodeType': 'ExpressionStatement', + 'src': '11131:53:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 593, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'components': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 585, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 583, + 'name': 'startingBalance', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 565, + 'src': '11214:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '+', + 'rightExpression': { + 'argumentTypes': null, + 'id': 584, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '11230:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '11214:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'id': 586, + 'isConstant': false, + 'isInlineArray': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'nodeType': 'TupleExpression', + 'src': '11213:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 591, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11276:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 588, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11252:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 587, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '11246:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 589, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11246:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 590, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'balanceOf', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 925, + 'src': '11246:29:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', + 'typeString': 'function (address) view external returns (uint256)' + } + }, + 'id': 592, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11246:33:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'src': '11213:66:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79', + 'id': 594, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '11291:40:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7', + 'typeString': 'literal_string \'ERC20 Balance did not change correctly\'' + }, + 'value': 'ERC20 Balance did not change correctly' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7', + 'typeString': 'literal_string \'ERC20 Balance did not change correctly\'' + } + ], + 'id': 582, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '11194:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 595, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11194:147:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 596, + 'nodeType': 'ExpressionStatement', + 'src': '11194:147:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'id': 598, + 'name': 'checkSuccess', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 652, + 'src': '11371:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', + 'typeString': 'function () pure returns (bool)' + } + }, + 'id': 599, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11371:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564', + 'id': 600, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '11397:55:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28', + 'typeString': 'literal_string \'Subscription::executeSubscription TransferFrom failed\'' + }, + 'value': 'Subscription::executeSubscription TransferFrom failed' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28', + 'typeString': 'literal_string \'Subscription::executeSubscription TransferFrom failed\'' + } + ], + 'id': 597, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '11352:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 601, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11352:112:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 602, + 'nodeType': 'ExpressionStatement', + 'src': '11352:112:1' + }, + { + 'eventCall': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 604, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '11514:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 605, + 'name': 'to', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 491, + 'src': '11520:2:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 606, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '11524:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'id': 607, + 'name': 'tokenAmount', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 495, + 'src': '11538:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 608, + 'name': 'periodSeconds', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 497, + 'src': '11551:13:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 609, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '11566:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + { + 'argumentTypes': null, + 'id': 610, + 'name': 'nonce', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 501, + 'src': '11576:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + ], + 'id': 603, + 'name': 'ExecuteSubscription', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 105, + 'src': '11481:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', + 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' + } + }, + 'id': 611, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '11481:110:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 612, + 'nodeType': 'EmitStatement', + 'src': '11476:115:1' + }, + { + 'condition': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 615, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 613, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '11811:8:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '>', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 614, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '11822:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '11811:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'falseBody': null, + 'id': 633, + 'nodeType': 'IfStatement', + 'src': '11807:822:1', + 'trueBody': { + 'id': 632, + 'nodeType': 'Block', + 'src': '11825:804:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 620, + 'name': 'from', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 489, + 'src': '12437:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 621, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '12443:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 622, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '12443:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + { + 'argumentTypes': null, + 'id': 623, + 'name': 'gasPrice', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 499, + 'src': '12455:8:1', + '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' + } + ], + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 617, + 'name': 'tokenAddress', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 493, + 'src': '12410:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + ], + 'id': 616, + 'name': 'ERC20', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1267, + 'src': '12404:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeString': 'type(contract ERC20)' + } + }, + 'id': 618, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'typeConversion', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12404:19:1', + 'typeDescriptions': { + 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeString': 'contract ERC20' + } + }, + 'id': 619, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'transferFrom', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': 1014, + 'src': '12404:32:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', + 'typeString': 'function (address,address,uint256) external returns (bool)' + } + }, + 'id': 624, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12404:60:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'id': 625, + 'nodeType': 'ExpressionStatement', + 'src': '12404:60:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'id': 627, + 'name': 'checkSuccess', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 652, + 'src': '12503:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', + 'typeString': 'function () pure returns (bool)' + } + }, + 'id': 628, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12503:14:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + { + 'argumentTypes': null, + 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74', + 'id': 629, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'string', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '12535:69:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7', + 'typeString': 'literal_string \'Subscription::executeSubscription Failed to pay gas as from account\'' + }, + 'value': 'Subscription::executeSubscription Failed to pay gas as from account' + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + { + 'typeIdentifier': 't_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7', + 'typeString': 'literal_string \'Subscription::executeSubscription Failed to pay gas as from account\'' + } + ], + 'id': 626, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1355, + 'src': '12478:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', + 'typeString': 'function (bool,string memory) pure' + } + }, + 'id': 630, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '12478:140:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 631, + 'nodeType': 'ExpressionStatement', + 'src': '12478:140:1' + } + ] + } + }, + { + 'expression': { + 'argumentTypes': null, + 'hexValue': '74727565', + 'id': 634, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'bool', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '12646:4:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'value': 'true' + }, + 'functionReturnParameters': 507, + 'id': 635, + 'nodeType': 'Return', + 'src': '12639:11:1' + } + ] + }, + 'documentation': null, + 'id': 637, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'executeSubscription', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 504, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 489, + 'name': 'from', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9604:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 488, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '9604:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 491, + 'name': 'to', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9643:10:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 490, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '9643:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 493, + 'name': 'tokenAddress', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9679:20:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 492, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '9679:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 495, + 'name': 'tokenAmount', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9751:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 494, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9751:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 497, + 'name': 'periodSeconds', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9821:21:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 496, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9821:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 499, + 'name': 'gasPrice', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9893:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 498, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9893:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 501, + 'name': 'nonce', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '9977:13:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 500, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '9977:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 503, + 'name': 'signature', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '10060:22:1', + 'stateVariable': false, + 'storageLocation': 'memory', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_memory_ptr', + 'typeString': 'bytes' + }, + 'typeName': { + 'id': 502, + 'name': 'bytes', + 'nodeType': 'ElementaryTypeName', + 'src': '10060:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bytes_storage_ptr', + 'typeString': 'bytes' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '9594:544:1' + }, + 'returnParameters': { + 'id': 507, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 506, + 'name': 'success', + 'nodeType': 'VariableDeclaration', + 'scope': 637, + 'src': '10171:12:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 505, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '10171:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '10170:14:1' + }, + 'scope': 675, + 'src': '9566:3091:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 651, + 'nodeType': 'Block', + 'src': '13157:770:1', + 'statements': [ + { + 'assignments': [ + 643 + ], + 'declarations': [ + { + 'constant': false, + 'id': 643, + 'name': 'returnValue', + 'nodeType': 'VariableDeclaration', + 'scope': 651, + 'src': '13167:19:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'typeName': { + 'id': 642, + 'name': 'uint256', + 'nodeType': 'ElementaryTypeName', + 'src': '13167:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'id': 645, + 'initialValue': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 644, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '13189:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'nodeType': 'VariableDeclarationStatement', + 'src': '13167:23:1' + }, + { + 'externalReferences': [ + { + 'returnValue': { + 'declaration': 643, + 'isOffset': false, + 'isSlot': false, + 'src': '13472:11:1', + 'valueSize': 1 + } + }, + { + 'returnValue': { + 'declaration': 643, + 'isOffset': false, + 'isSlot': false, + 'src': '13749:11:1', + 'valueSize': 1 + } + } + ], + 'id': 646, + 'nodeType': 'InlineAssembly', + 'operations': '{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}', + 'src': '13268:635:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + }, + 'id': 649, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'id': 647, + 'name': 'returnValue', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 643, + 'src': '13904:11:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint256', + 'typeString': 'uint256' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '!=', + 'rightExpression': { + 'argumentTypes': null, + 'hexValue': '30', + 'id': 648, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '13919:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_0_by_1', + 'typeString': 'int_const 0' + }, + 'value': '0' + }, + 'src': '13904:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'functionReturnParameters': 641, + 'id': 650, + 'nodeType': 'Return', + 'src': '13897:23:1' + } + ] + }, + 'documentation': 'Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.', + 'id': 652, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'checkSuccess', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 638, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '13093:7:1' + }, + 'returnParameters': { + 'id': 641, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 640, + 'name': '', + 'nodeType': 'VariableDeclaration', + 'scope': 652, + 'src': '13147:4:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + }, + 'typeName': { + 'id': 639, + 'name': 'bool', + 'nodeType': 'ElementaryTypeName', + 'src': '13147:4:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '13146:6:1' + }, + 'scope': 675, + 'src': '13072:855:1', + 'stateMutability': 'pure', + 'superFunction': null, + 'visibility': 'private' + }, + { + 'body': { + 'id': 666, + 'nodeType': 'Block', + 'src': '14101:70:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + 'id': 659, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 656, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1351, + 'src': '14117:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 657, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '14117:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 658, + 'name': 'author', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '14129:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '14117:18:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + ], + 'id': 655, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1354, + 1355 + ], + 'referencedDeclaration': 1354, + 'src': '14109:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', + 'typeString': 'function (bool) pure' + } + }, + 'id': 660, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '14109:27:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 661, + 'nodeType': 'ExpressionStatement', + 'src': '14109:27:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'id': 663, + 'name': 'author', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '14157:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + ], + 'id': 662, + 'name': 'selfdestruct', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1359, + 'src': '14144:12:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$', + 'typeString': 'function (address payable)' + } + }, + 'id': 664, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '14144:20:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 665, + 'nodeType': 'ExpressionStatement', + 'src': '14144:20:1' + } + ] + }, + 'documentation': null, + 'id': 667, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'endContract', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 653, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14077:2:1' + }, + 'returnParameters': { + 'id': 654, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14101:0:1' + }, + 'scope': 675, + 'src': '14057:114:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'external' + }, + { + 'body': { + 'id': 673, + 'nodeType': 'Block', + 'src': '14277:25:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [], + 'expression': { + 'argumentTypes': [], + 'id': 670, + 'name': 'revert', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1356, + 1357 + ], + 'referencedDeclaration': 1356, + 'src': '14286:6:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_revert_pure$__$returns$__$', + 'typeString': 'function () pure' + } + }, + 'id': 671, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '14286:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 672, + 'nodeType': 'ExpressionStatement', + 'src': '14286:9:1' + } + ] + }, + 'documentation': null, + 'id': 674, + 'implemented': true, + 'kind': 'fallback', + 'modifiers': [], + 'name': '', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 668, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14257:2:1' + }, + 'returnParameters': { + 'id': 669, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '14277:0:1' + }, + 'scope': 675, + 'src': '14248:54:1', + 'stateMutability': 'payable', + 'superFunction': null, + 'visibility': 'external' + } + ], + 'scope': 676, + 'src': '1091:13213:1' + } + ], + 'src': '0:14305:1' + }, + 'compiler': { + 'name': 'solc', + 'version': '0.5.2+commit.1df8f40c.Emscripten.clang' + }, + 'networks': {}, + 'schemaVersion': '3.0.6', + 'updatedAt': '2019-05-12T15:53:10.470Z', + 'devdoc': { + 'methods': {} + }, + 'userdoc': { + 'methods': {} + } +}; diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 4d8fffd60b4..916b4cceef0 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -1,9 +1,17 @@ /* eslint-disable no-console */ let deployedToken; +let deployedSubscription; let tokenAddress; +let redirectURL; +let realPeriodSeconds = 0; +let selected_token; +let splitterAddress; +let gitcoinDonationAddress; + $(document).ready(function() { - let gitcoinDonationAddress = "0x0000000000000000000000000000000000000000"; + gitcoinDonationAddress = $('gitcoin_donation_address').val(); + splitterAddress = $('#splitter_contract_address').val(); $('.js-select2').each(function() { $(this).select2(); @@ -96,7 +104,6 @@ $(document).ready(function() { data[this.name] = this.value; }); - let realPeriodSeconds = 0; if (data.frequency) { @@ -117,22 +124,33 @@ $(document).ready(function() { } } - let deployedSubscription = new web3.eth.Contract(compiledSubscription.abi, data.contract_address); - let selected_token; + + if (data.contract_version == 0) { + deployedSubscription = new web3.eth.Contract(compiledSubscription0.abi, data.contract_address); + } else if (data.contract_version == 1) { + deployedSubscription = new web3.eth.Contract(compiledSubscription1.abi, data.contract_address); + } if (data.token_address != '0x0000000000000000000000000000000000000000') { selected_token = data.token_address; deployedToken = new web3.eth.Contract(compiledToken.abi, data.token_address); + console.log('data.token_address is set, skipping denomination ' + data.token_address); } else { selected_token = data.denomination; deployedToken = new web3.eth.Contract(compiledToken.abi, data.denomination); + console.log('data.token_address is 0x0, denomination is ' + selected_token); $('#token_symbol').val($('#js-token option:selected').text()); + $('#token_address').val(selected_token); + data.token_address = selected_token; } + if (!selected_token) { _alert('Please select a token', 'error'); return; } + tokenAddress = data.token_address; + console.log('tokenAddress: ' + tokenAddress); deployedToken.methods.decimals().call(function(err, decimals) { if (err) { @@ -140,19 +158,30 @@ $(document).ready(function() { return; } - let realGasPrice = 0; // zero cost metatxs - - if (realPeriodSeconds < 2592000) { - // charge gas for intervals less than a month - realGasPrice = Math.ceil($('#gasPrice').val() * Math.pow(10, 9)); + let realTokenAmount = Number(data.amount_per_period * Math.pow(10, decimals)); + let realApproval; + + if (data.contract_version == 0) { + // version 0 of the contract has no fee + console.log('feeless'); + realApproval = Number((grant_amount * data.num_periods * Math.pow(10, decimals)) + 1); + } else if (data.contract_version == 1) { + console.log('feefull'); + console.log('gitcoin amt:' + gitcoin_grant_amount); + console.log('grant amt:' + grant_amount); + realApproval = Number(((grant_amount + gitcoin_grant_amount) * data.num_periods * Math.pow(10, decimals)) + 1); + console.log('realApproval: ' + realApproval); } + let realGasPrice = Number(gitcoin_grant_amount * Math.pow(10, decimals)); // optional grants fee + $('#gas_price').val(realGasPrice); - let realTokenAmount = Number(data.amount_per_period * Math.pow(10, decimals)); - let amountSTR = realTokenAmount.toLocaleString('fullwide', { useGrouping: false }); + // if (realPeriodSeconds < 2592000) { + // charge gas for intervals less than a month + // realGasPrice = Math.ceil($('#gasPrice').val() * Math.pow(10, 9)); + // } - let realApproval = Number(((grant_amount + gitcoin_grant_amount) * data.num_periods * Math.pow(10, decimals)) + 1); let approvalSTR = realApproval.toLocaleString('fullwide', { useGrouping: false }); web3.eth.getAccounts(function(err, accounts) { @@ -161,18 +190,26 @@ $(document).ready(function() { let url; + var approvalAddress; + + if (data.num_periods == 1) { + approvalAddress = splitterAddress; + } else { + approvalAddress = data.contract_address; + } + deployedToken.methods.approve( - data.contract_address, + approvalAddress, web3.utils.toTwosComplement(approvalSTR) ).send({ from: accounts[0], - gasPrice: realGasPrice + gasPrice: web3.utils.toHex($('#gasPrice').val() * Math.pow(10, 9)) }).on('error', function(error) { console.log('1', error); _alert({ message: gettext('Your approval transaction failed. Please try again.')}, 'error'); }).on('transactionHash', function(transactionHash) { if (data.num_periods == 1) { - //call splitter after approval + // call splitter after approval splitPayment(accounts[0], data.admin_address, gitcoinDonationAddress, Number(grant_amount * Math.pow(10, decimals)).toLocaleString('fullwide', {useGrouping: false}), Number(gitcoin_grant_amount * Math.pow(10, decimals)).toLocaleString('fullwide', {useGrouping: false})); } else { subscribeToGrant(transactionHash); @@ -180,9 +217,9 @@ $(document).ready(function() { }).on('confirmation', function(confirmationNumber, receipt) { waitforData(() => { document.suppress_loading_leave_code = true; - window.location = url; + window.location = redirectURL; }); // waitforData - }); // approve + }); // approve on confirmation }); // getAccounts }); // decimals } // submitHandler @@ -214,118 +251,172 @@ $(document).ready(function() { }); // document ready const subscribeToGrant = (transactionHash) => { - $('#sub_new_approve_tx_id').val(transactionHash); - const linkURL = etherscan_tx_url(transactionHash); - let token_address = $('#js-token').length ? $('#js-token').val() : $('#sub_token_address').val(); - let data = { - 'contributor_address': $('#contributor_address').val(), - 'amount_per_period': $('#amount').val(), - 'real_period_seconds': realPeriodSeconds, - 'frequency': $('#frequency_count').val(), - 'frequency_unit': $('#frequency_unit').val(), - 'token_address': selected_token, - 'token_symbol': $('#token_symbol').val(), - 'gas_price': $('#gas_price').val(), - 'sub_new_approve_tx_id': transactionHash, - 'num_tx_approved': $('#period').val(), - 'network': $('#network').val(), - 'csrfmiddlewaretoken': $("#js-fundGrant input[name='csrfmiddlewaretoken']").val() - }; + web3.eth.getAccounts(function(err, accounts) { + deployedToken.methods.decimals().call(function(err, decimals) { + $('#sub_new_approve_tx_id').val(transactionHash); + const linkURL = etherscan_tx_url(transactionHash); + let token_address = $('#js-token').length ? $('#js-token').val() : $('#sub_token_address').val(); + let data = { + 'contributor_address': $('#contributor_address').val(), + 'amount_per_period': grant_amount, + 'real_period_seconds': realPeriodSeconds, + 'frequency': $('#frequency_count').val(), + 'frequency_unit': $('#frequency_unit').val(), + 'token_address': selected_token, + 'token_symbol': $('#token_symbol').val(), + 'gas_price': $('#gas_price').val(), + 'sub_new_approve_tx_id': transactionHash, + 'num_tx_approved': $('#period').val(), + 'network': $('#network').val(), + 'csrfmiddlewaretoken': $("#js-fundGrant input[name='csrfmiddlewaretoken']").val() + }; - $.ajax({ - type: 'post', - url: '', - data: data, - success: json => { - console.log('successfully saved subscription'); - }, - error: () => { - _alert({ message: gettext('Your subscription failed to save. Please try again.') }, 'error'); - } - }); + $.ajax({ + type: 'post', + url: '', + data: data, + success: json => { + console.log('successfully saved subscription'); + }, + error: () => { + _alert({ message: gettext('Your subscription failed to save. Please try again.') }, 'error'); + } + }); + + document.issueURL = linkURL; + $('#transaction_url').attr('href', linkURL); + enableWaitState('#grants_form'); + // TODO: fix the tweet modal + $('#tweetModal').modal('show'); + + deployedSubscription.methods.extraNonce(accounts[0]).call(function(err, nonce) { + + nonce = parseInt(nonce) + 1; + + const parts = [ + web3.utils.toChecksumAddress(accounts[0]), // subscriber address + web3.utils.toChecksumAddress($('#admin_address').val()), // admin_address + web3.utils.toChecksumAddress(selected_token), // token denomination / address + web3.utils.toTwosComplement(Number(grant_amount * Math.pow(10, decimals)).toLocaleString('fullwide', {useGrouping: false})), + web3.utils.toTwosComplement(realPeriodSeconds), + web3.utils.toTwosComplement(data.gas_price), + web3.utils.toTwosComplement(nonce) + ]; - document.issueURL = linkURL; - $('#transaction_url').attr('href', linkURL); - enableWaitState('#grants_form'); - $('#tweetModal').modal('show'); - // Should add approval transactions to transaction history - deployedSubscription.methods.extraNonce(accounts[0]).call(function(err, nonce) { - - nonce = parseInt(nonce) + 1; - - const parts = [ - web3.utils.toChecksumAddress(accounts[0]), // subscriber address - web3.utils.toChecksumAddress($('#admin_address').val()), // admin_address - web3.utils.toChecksumAddress(selected_token), // token denomination / address - web3.utils.toTwosComplement(amountSTR), // data.amount_per_period - web3.utils.toTwosComplement(realPeriodSeconds), // data.period_seconds - web3.utils.toTwosComplement(realGasPrice), // data.gas_price - web3.utils.toTwosComplement(nonce) // nonce - ]; - - processSubscriptionHash(parts); + console.log('correct grant amount is: ' + web3.utils.toTwosComplement(Number(grant_amount * Math.pow(10, decimals)).toLocaleString('fullwide', {useGrouping: false}))); + console.log('current grant amount is: ' + parts[3]); + console.log(parts); + + processSubscriptionHash(parts); + }); + }); }); -} +}; const signSubscriptionHash = (subscriptionHash) => { - web3.eth.personal.sign('' + subscriptionHash, accounts[0], function(err, signature) { - if (signature) { - $('#signature').val(signature); + web3.eth.getAccounts(function(err, accounts) { - let data = { - 'subscription_hash': subscriptionHash, - 'signature': signature, - 'csrfmiddlewaretoken': $("#js-fundGrant input[name='csrfmiddlewaretoken']").val(), - 'sub_new_approve_tx_id': $('#sub_new_approve_tx_id').val() - }; + web3.eth.personal.sign('' + subscriptionHash, accounts[0], function(err, signature) { + if (signature) { + $('#signature').val(signature); - saveSubscription(data); - }; + let data = { + 'subscription_hash': subscriptionHash, + 'signature': signature, + 'csrfmiddlewaretoken': $("#js-fundGrant input[name='csrfmiddlewaretoken']").val(), + 'sub_new_approve_tx_id': $('#sub_new_approve_tx_id').val() + }; + + saveSubscription(data, false); + } + }); }); -} +}; const processSubscriptionHash = (parts) => { deployedSubscription.methods.getSubscriptionHash(...parts).call(function(err, subscriptionHash) { $('#subscription_hash').val(subscriptionHash); signSubscriptionHash(subscriptionHash); }); -} +}; -const saveSubscription = (data) => { +const saveSubscription = (data, isOneTimePayment) => { + console.log(data); + if (isOneTimePayment) { + data['real_period_seconds'] = 0; + } $.ajax({ type: 'post', url: '', data: data, success: json => { - console.log('successfully saved subscriptionHash and signature'); - url = json.url; - $('#wait').val('false'); + console.log(json); + console.log('successfully saved subscription'); + if (json.url != undefined) { + redirectURL = json.url; + $('#wait').val('false'); + } }, - error: () => { + error: (error) => { + console.log(error); _alert({ message: gettext('Your subscription failed to save. Please try again.') }, 'error'); url = window.location; } }); -} +}; const splitPayment = (account, toFirst, toSecond, valueFirst, valueSecond) => { - let deployedSplitter = new web3.eth.Contract(compiledSplitter.abiDefinition, "0xe2fd6dfe7f371e884e782d46f043552421b3a9d9"); + var data = {}; + var form = $('#js-fundGrant'); + + $.each($(form).serializeArray(), function() { + data[this.name] = this.value; + }); + saveSubscription(data, true); + // TODO: deploy production splitter and change address on network + let deployedSplitter = new web3.eth.Contract(compiledSplitter.abiDefinition, splitterAddress); - console.log('deployed splitter is ' + deployedSplitter); + let token_address = $('#js-token').length ? $('#js-token').val() : $('#sub_token_address').val(); + + console.log('splitting payment'); + console.log('tofirst: ' + toFirst); + console.log('tosecond: ' + toSecond); + console.log('valueFirst: ' + valueFirst); + console.log('valueSecond: ' + valueSecond); + console.log('tokenADdress: ' + tokenAddress); deployedSplitter.methods.splitTransfer(toFirst, toSecond, valueFirst, valueSecond, tokenAddress).send({ - from: account + from: account, + gas: web3.utils.toHex(100000) }).on('error', function(error) { - + console.log('1', error); + _alert({ message: gettext('Your payment transaction failed. Please try again.')}, 'error'); }).on('transactionHash', function(transactionHash) { - - }).on('confirmation', function(confirmationNumber, receipt) { waitforData(() => { document.suppress_loading_leave_code = true; - window.location = url; + console.log('loading url: ' + redirectURL); + window.location = redirectURL; }); + + const linkURL = etherscan_tx_url(transactionHash); + + document.issueURL = linkURL; + + $('#transaction_url').attr('href', linkURL); + enableWaitState('#grants_form'); + // TODO: Fix tweet modal + // $('#tweetModal').modal('show'); + }).on('confirmation', function(confirmationNumber, receipt) { + data = { + 'subscription_hash': 'onetime', + 'signature': 'onetime', + 'csrfmiddlewaretoken': $("#js-fundGrant input[name='csrfmiddlewaretoken']").val(), + 'sub_new_approve_tx_id': $('#sub_new_approve_tx_id').val() + }; + console.log('confirmed!'); + saveSubscription(data, true); }); -} +}; const waitforData = (callback) => { if ($('#wait').val() === 'false') { diff --git a/app/assets/v2/js/grants/new.js b/app/assets/v2/js/grants/new.js index de0bd994c57..ac8b05a2500 100644 --- a/app/assets/v2/js/grants/new.js +++ b/app/assets/v2/js/grants/new.js @@ -93,21 +93,44 @@ const init = () => { // Begin New Deploy Subscription Contract let SubscriptionContract = new web3.eth.Contract(compiledSubscription.abi); + console.log(compiledSubscription.abi); + // These args are baseline requirements for the contract set by the sender. Will set most to zero to abstract complexity from user. - let args = [ - // admin_address - web3.utils.toChecksumAddress(data.admin_address), - // required token - web3.utils.toChecksumAddress(data.denomination), - // required tokenAmount - web3.utils.toTwosComplement(0), - // data.frequency - web3.utils.toTwosComplement(0), - // data.gas_price - web3.utils.toTwosComplement(0), - // contract version - web3.utils.toTwosComplement(0) - ]; + let args; + + if ($('#contract_version').val() == 1) { + args = [ + // admin_address + web3.utils.toChecksumAddress(data.admin_address), + // required token + web3.utils.toChecksumAddress(data.denomination), + // required tokenAmount + web3.utils.toTwosComplement(0), + // data.frequency + web3.utils.toTwosComplement(0), + // data.gas_price + web3.utils.toTwosComplement(0), + // contract version + web3.utils.toTwosComplement(1), + // trusted relayer + web3.utils.toChecksumAddress(data.trusted_relayer) + ]; + } else if ($('#contract_version').val() == 0) { + args = [ + // admin_address + web3.utils.toChecksumAddress(data.admin_address), + // required token + web3.utils.toChecksumAddress(data.denomination), + // required tokenAmount + web3.utils.toTwosComplement(0), + // data.frequency + web3.utils.toTwosComplement(0), + // data.gas_price + web3.utils.toTwosComplement(0), + // contract version + web3.utils.toTwosComplement(0) + ]; + } web3.eth.getAccounts(function(err, accounts) { web3.eth.net.getId(function(err, network) { diff --git a/app/assets/v2/js/grants/shared.js b/app/assets/v2/js/grants/shared.js index 60405ba46e7..b14415f5010 100644 --- a/app/assets/v2/js/grants/shared.js +++ b/app/assets/v2/js/grants/shared.js @@ -1,7 +1,8 @@ // outside of document.ready to be in global scope var compiledSubscription; var compiledSplitter; -var splitterAddress; +var splitterAddress = '0xe2fd6dfe7f371e884e782d46f043552421b3a9d9'; +var contractVersion; // Waiting State screen var enableWaitState = container => { @@ -144,11 +145,13 @@ const show_error_banner = (result, web3_not_found) => { $(document).ready(function() { - let contractVersion = $('#contract_version').val(); + contractVersion = $('#contract_version').val(); if (contractVersion) { if (contractVersion == 0) { compiledSubscription = compiledSubscription0; + } else if (contractVersion == 1) { + compiledSubscription = compiledSubscription1; } } diff --git a/app/grants/abi.py b/app/grants/abi.py index e8232133bab..906eaebedc2 100644 --- a/app/grants/abi.py +++ b/app/grants/abi.py @@ -17,6 +17,180 @@ along with this program. If not, see . """ +abi_v1 = [{'constant': True, + 'inputs': [], + 'name': 'requiredGasPrice', + 'outputs': [{'name': '', 'type': 'uint256'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [], + 'name': 'requiredTokenAmount', + 'outputs': [{'name': '', 'type': 'uint256'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [], + 'name': 'requiredToAddress', + 'outputs': [{'name': '', 'type': 'address'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [], + 'name': 'requiredPeriodSeconds', + 'outputs': [{'name': '', 'type': 'uint256'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [], + 'name': 'requiredTokenAddress', + 'outputs': [{'name': '', 'type': 'address'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [], + 'name': 'relayer', + 'outputs': [{'name': '', 'type': 'address'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [{'name': '', 'type': 'address'}], + 'name': 'extraNonce', + 'outputs': [{'name': '', 'type': 'uint256'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [], + 'name': 'author', + 'outputs': [{'name': '', 'type': 'address'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [{'name': '', 'type': 'bytes32'}], + 'name': 'nextValidTimestamp', + 'outputs': [{'name': '', 'type': 'uint256'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'inputs': [{'name': '_toAddress', 'type': 'address'}, + {'name': '_tokenAddress', 'type': 'address'}, + {'name': '_tokenAmount', 'type': 'uint256'}, + {'name': '_periodSeconds', 'type': 'uint256'}, + {'name': '_gasPrice', 'type': 'uint256'}, + {'name': '_version', 'type': 'uint8'}, + {'name': '_relayer', 'type': 'address'}], + 'payable': False, + 'stateMutability': 'nonpayable', + 'type': 'constructor'}, + {'payable': True, 'stateMutability': 'payable', 'type': 'fallback'}, + {'anonymous': False, + 'inputs': [{'indexed': True, 'name': 'from', 'type': 'address'}, + {'indexed': True, 'name': 'to', 'type': 'address'}, + {'indexed': False, 'name': 'tokenAddress', 'type': 'address'}, + {'indexed': False, 'name': 'tokenAmount', 'type': 'uint256'}, + {'indexed': False, 'name': 'periodSeconds', 'type': 'uint256'}, + {'indexed': False, 'name': 'gasPrice', 'type': 'uint256'}, + {'indexed': False, 'name': 'nonce', 'type': 'uint256'}], + 'name': 'ExecuteSubscription', + 'type': 'event'}, + {'anonymous': False, + 'inputs': [{'indexed': True, 'name': 'from', 'type': 'address'}, + {'indexed': True, 'name': 'to', 'type': 'address'}, + {'indexed': False, 'name': 'tokenAddress', 'type': 'address'}, + {'indexed': False, 'name': 'tokenAmount', 'type': 'uint256'}, + {'indexed': False, 'name': 'periodSeconds', 'type': 'uint256'}, + {'indexed': False, 'name': 'gasPrice', 'type': 'uint256'}, + {'indexed': False, 'name': 'nonce', 'type': 'uint256'}], + 'name': 'CancelSubscription', + 'type': 'event'}, + {'constant': True, + 'inputs': [{'name': 'subscriptionHash', 'type': 'bytes32'}, + {'name': 'gracePeriodSeconds', 'type': 'uint256'}], + 'name': 'isSubscriptionActive', + 'outputs': [{'name': '', 'type': 'bool'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [{'name': 'from', 'type': 'address'}, + {'name': 'to', 'type': 'address'}, + {'name': 'tokenAddress', 'type': 'address'}, + {'name': 'tokenAmount', 'type': 'uint256'}, + {'name': 'periodSeconds', 'type': 'uint256'}, + {'name': 'gasPrice', 'type': 'uint256'}, + {'name': 'nonce', 'type': 'uint256'}], + 'name': 'getSubscriptionHash', + 'outputs': [{'name': '', 'type': 'bytes32'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': True, + 'inputs': [{'name': 'subscriptionHash', 'type': 'bytes32'}, + {'name': 'signature', 'type': 'bytes'}], + 'name': 'getSubscriptionSigner', + 'outputs': [{'name': '', 'type': 'address'}], + 'payable': False, + 'stateMutability': 'pure', + 'type': 'function'}, + {'constant': True, + 'inputs': [{'name': 'from', 'type': 'address'}, + {'name': 'to', 'type': 'address'}, + {'name': 'tokenAddress', 'type': 'address'}, + {'name': 'tokenAmount', 'type': 'uint256'}, + {'name': 'periodSeconds', 'type': 'uint256'}, + {'name': 'gasPrice', 'type': 'uint256'}, + {'name': 'nonce', 'type': 'uint256'}, + {'name': 'signature', 'type': 'bytes'}], + 'name': 'isSubscriptionReady', + 'outputs': [{'name': '', 'type': 'bool'}], + 'payable': False, + 'stateMutability': 'view', + 'type': 'function'}, + {'constant': False, + 'inputs': [{'name': 'from', 'type': 'address'}, + {'name': 'to', 'type': 'address'}, + {'name': 'tokenAddress', 'type': 'address'}, + {'name': 'tokenAmount', 'type': 'uint256'}, + {'name': 'periodSeconds', 'type': 'uint256'}, + {'name': 'gasPrice', 'type': 'uint256'}, + {'name': 'nonce', 'type': 'uint256'}, + {'name': 'signature', 'type': 'bytes'}], + 'name': 'cancelSubscription', + 'outputs': [{'name': 'success', 'type': 'bool'}], + 'payable': False, + 'stateMutability': 'nonpayable', + 'type': 'function'}, + {'constant': False, + 'inputs': [{'name': 'from', 'type': 'address'}, + {'name': 'to', 'type': 'address'}, + {'name': 'tokenAddress', 'type': 'address'}, + {'name': 'tokenAmount', 'type': 'uint256'}, + {'name': 'periodSeconds', 'type': 'uint256'}, + {'name': 'gasPrice', 'type': 'uint256'}, + {'name': 'nonce', 'type': 'uint256'}, + {'name': 'signature', 'type': 'bytes'}], + 'name': 'executeSubscription', + 'outputs': [{'name': 'success', 'type': 'bool'}], + 'payable': False, + 'stateMutability': 'nonpayable', + 'type': 'function'}, + {'constant': False, + 'inputs': [], + 'name': 'endContract', + 'outputs': [], + 'payable': False, + 'stateMutability': 'nonpayable', + 'type': 'function'}] + + abi_v0 = [{ "constant": True, "inputs": [], diff --git a/app/grants/abi_v1.json b/app/grants/abi_v1.json new file mode 100644 index 00000000000..a20e3746c0f --- /dev/null +++ b/app/grants/abi_v1.json @@ -0,0 +1,18068 @@ +{ + "contractName": "Subscription", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "requiredGasPrice", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "requiredTokenAmount", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "requiredToAddress", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "requiredPeriodSeconds", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "requiredTokenAddress", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "relayer", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "extraNonce", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "author", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "name": "nextValidTimestamp", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "_toAddress", + "type": "address" + }, + { + "name": "_tokenAddress", + "type": "address" + }, + { + "name": "_tokenAmount", + "type": "uint256" + }, + { + "name": "_periodSeconds", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_version", + "type": "uint8" + }, + { + "name": "_relayer", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "tokenAddress", + "type": "address" + }, + { + "indexed": false, + "name": "tokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "name": "periodSeconds", + "type": "uint256" + }, + { + "indexed": false, + "name": "gasPrice", + "type": "uint256" + }, + { + "indexed": false, + "name": "nonce", + "type": "uint256" + } + ], + "name": "ExecuteSubscription", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "tokenAddress", + "type": "address" + }, + { + "indexed": false, + "name": "tokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "name": "periodSeconds", + "type": "uint256" + }, + { + "indexed": false, + "name": "gasPrice", + "type": "uint256" + }, + { + "indexed": false, + "name": "nonce", + "type": "uint256" + } + ], + "name": "CancelSubscription", + "type": "event" + }, + { + "constant": true, + "inputs": [ + { + "name": "subscriptionHash", + "type": "bytes32" + }, + { + "name": "gracePeriodSeconds", + "type": "uint256" + } + ], + "name": "isSubscriptionActive", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "from", + "type": "address" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "tokenAddress", + "type": "address" + }, + { + "name": "tokenAmount", + "type": "uint256" + }, + { + "name": "periodSeconds", + "type": "uint256" + }, + { + "name": "gasPrice", + "type": "uint256" + }, + { + "name": "nonce", + "type": "uint256" + } + ], + "name": "getSubscriptionHash", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "subscriptionHash", + "type": "bytes32" + }, + { + "name": "signature", + "type": "bytes" + } + ], + "name": "getSubscriptionSigner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "from", + "type": "address" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "tokenAddress", + "type": "address" + }, + { + "name": "tokenAmount", + "type": "uint256" + }, + { + "name": "periodSeconds", + "type": "uint256" + }, + { + "name": "gasPrice", + "type": "uint256" + }, + { + "name": "nonce", + "type": "uint256" + }, + { + "name": "signature", + "type": "bytes" + } + ], + "name": "isSubscriptionReady", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "from", + "type": "address" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "tokenAddress", + "type": "address" + }, + { + "name": "tokenAmount", + "type": "uint256" + }, + { + "name": "periodSeconds", + "type": "uint256" + }, + { + "name": "gasPrice", + "type": "uint256" + }, + { + "name": "nonce", + "type": "uint256" + }, + { + "name": "signature", + "type": "bytes" + } + ], + "name": "cancelSubscription", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "from", + "type": "address" + }, + { + "name": "to", + "type": "address" + }, + { + "name": "tokenAddress", + "type": "address" + }, + { + "name": "tokenAmount", + "type": "uint256" + }, + { + "name": "periodSeconds", + "type": "uint256" + }, + { + "name": "gasPrice", + "type": "uint256" + }, + { + "name": "nonce", + "type": "uint256" + }, + { + "name": "signature", + "type": "bytes" + } + ], + "name": "executeSubscription", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "endContract", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"requiredGasPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"subscriptionHash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"getSubscriptionSigner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredTokenAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredToAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredPeriodSeconds\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredTokenAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"cancelSubscription\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"relayer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"extraNonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"author\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"subscriptionHash\",\"type\":\"bytes32\"},{\"name\":\"gracePeriodSeconds\",\"type\":\"uint256\"}],\"name\":\"isSubscriptionActive\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"endContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"getSubscriptionHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"executeSubscription\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isSubscriptionReady\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextValidTimestamp\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_toAddress\",\"type\":\"address\"},{\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"name\":\"_tokenAmount\",\"type\":\"uint256\"},{\"name\":\"_periodSeconds\",\"type\":\"uint256\"},{\"name\":\"_gasPrice\",\"type\":\"uint256\"},{\"name\":\"_version\",\"type\":\"uint8\"},{\"name\":\"_relayer\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ExecuteSubscription\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"CancelSubscription\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\":\"Subscription\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\":{\"keccak256\":\"0xd23b843d2a5cbd6e762c03fc55c62e331f306f37458e14cf791f4d10fc8f4c4f\",\"urls\":[\"bzzr://33f93fb60362d588a089d221a20097a97112f7060364f97151667be7e2007bc7\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0x0cbeb7f69b70ff62eb5536caebbc8701b6490ae7ee2e252d77891cf6eba11326\",\"urls\":[\"bzzr://58a443499466ee0706d22af81b43ab6779b519255fbc66276546386ec00a30d7\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xc2a200a877c4a9b2475c246c54ffecc69ffde3e11af83319c63c2dc5458bac80\",\"urls\":[\"bzzr://c8876e2c39b60f155d748d71d715c8f3903fae5a405ac599adcb6ad2f9a583f9\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x3dceb7e4aa237a56111c13f77d7efadeceda7271d62bfac94ac79afab7c1f411\",\"urls\":[\"bzzr://2f34152a5bec385352002c31bc89f5e9935f628f1923ccea45c2281e0084a4db\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x59e7df16169a498cb8837963b2f5461d88e63bd1eb6c7d58b814d76b84ccbe61\",\"urls\":[\"bzzr://e572c9c4e02e37349702451bf3b5dcbbc86a19da5a51695b5b3e1bfe1e7825dc\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405160e080612345833981018060405260e081101561003057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846004819055508360058190555082600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505061219a806101ab6000396000f3fe608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029", + "deployedBytecode": "0x608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029", + "sourceMap": "1091:13213:1:-;;;3145:489;8:9:-1;5:2;;;30:1;27;20:12;5:2;3145:489:1;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3145:489:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3396:10;3378:17;;:28;;;;;;;;;;;;;;;;;;3437:13;3416:20;;:34;;;;;;;;;;;;;;;;;;3480:12;3460:19;:32;;;;3524:14;3502:21;:36;;;;3565:9;3548:16;:26;;;;3591:10;3584:6;;:17;;;;;;;;;;;;;;;;;;3619:8;3611:7;;:16;;;;;;;;;;;;;;;;;;3145:489;;;;;;;1091:13213;;;;;;", + "deployedSourceMap": "1091:13213:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14286:9;;;1631:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1631:31:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6029:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6029:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6029:318:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6029:318:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6029:318:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6029:318:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6029:318:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1549:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1549:34:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1470:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1470:32:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1589:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1589:36:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1508:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1508:35:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7985:1423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7985:1423:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7985:1423:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7985:1423:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7985:1423:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1288:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1288:22:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2088:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2088:45:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2088:45:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1212:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1212:29:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3874:390;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3874:390:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3874:390:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14057:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14057:114:1;;;:::i;:::-;;4420:1548;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4420:1548:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4420:1548:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9566:3091;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9566:3091:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9566:3091:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9566:3091:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9566:3091:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6470:1261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6470:1261:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6470:1261:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6470:1261:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6470:1261:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1854:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1854:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1854:53:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1631:31;;;;:::o;6029:318::-;6250:7;6280:60;6330:9;6280:41;:16;:39;:41::i;:::-;:49;;:60;;;;:::i;:::-;6273:67;;6029:318;;;;:::o;1549:34::-;;;;:::o;1470:32::-;;;;;;;;;;;;;:::o;1589:36::-;;;;:::o;1508:35::-;;;;;;;;;;;;;:::o;7985:1423::-;8588:12;8616:24;8643:110;8676:4;8682:2;8686:12;8700:11;8713:13;8728:8;8738:5;8643:19;:110::i;:::-;8616:137;;8763:14;8780:50;8802:16;8820:9;8780:21;:50::i;:::-;8763:67;;8897:4;8887:14;;:6;:14;;;8879:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9020:10;9012:18;;:4;:18;;;9004:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9251:2;9206:18;:36;9225:16;9206:36;;;;;;;;;;;:48;;;;9308:2;9270:109;;9302:4;9270:109;;;9312:12;9326:11;9339:13;9354:8;9364:5;9270:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9397:4;9390:11;;;;7985:1423;;;;;;;;;;:::o;1288:22::-;;;;;;;;;;;;;:::o;2088:45::-;;;;;;;;;;;;;;;;;:::o;1212:29::-;;;;;;;;;;;;;:::o;3874:390::-;4027:4;4096:2;4050:18;:36;4069:16;4050:36;;;;;;;;;;;;:49;4047:88;;;4119:5;4112:12;;;;4047:88;4187:60;4228:18;4187;:36;4206:16;4187:36;;;;;;;;;;;;:40;;:60;;;;:::i;:::-;4152:15;:95;;4144:113;;3874:390;;;;;:::o;14057:114::-;14129:6;;;;;;;;;;;14117:18;;:10;:18;;;14109:27;;;;;;;;14157:6;;;;;;;;;;;14144:20;;;4420:1548;4956:7;5122:1;5093:31;;:17;;;;;;;;;;;:31;;;:58;;;;5134:17;;;;;;;;;;;5128:23;;:2;:23;;;5093:58;5084:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5233:1;5201:34;;:20;;;;;;;;;;;:34;;;:74;;;;5255:20;;;;;;;;;;;5239:36;;:12;:36;;;5201:74;5192:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5352:1;5329:19;;:24;:62;;;;5372:19;;5357:11;:34;5329:62;5320:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5469:1;5444:21;;:26;:68;;;;5491:21;;5474:13;:38;5444:68;5435:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:1;5567:16;;:21;:53;;;;5604:16;;5592:8;:28;5567:53;5558:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5731:4;5726:10;;5759:1;5754:7;;5787:4;5810;5832:2;5852:12;5882:11;5911:13;5942:8;5692:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5692:268:1;;;5669:292;;;;;;5662:299;;4420:1548;;;;;;;;;:::o;9566:3091::-;10171:12;10221:7;;;;;;;;;;;10207:21;;:10;:21;;;10199:30;;;;;;;;10239:24;10266:110;10299:4;10305:2;10309:12;10323:11;10336:13;10351:8;10361:5;10266:19;:110::i;:::-;10239:137;;10453:99;10473:4;10479:2;10483:12;10497:11;10510:13;10525:8;10535:5;10542:9;10453:19;:99::i;:::-;10444:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:34;10772:13;10752:15;:19;;:34;;;;:::i;:::-;10713:18;:36;10732:16;10713:36;;;;;;;;;;;:73;;;;10913:10;:16;10924:4;10913:16;;;;;;;;;;;;;;;;10905:5;:24;10902:75;;;10961:5;10942:10;:16;10953:4;10942:16;;;;;;;;;;;;;;;:24;;;;10902:75;11062:23;11094:12;11088:29;;;11118:2;11088:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11088:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11088:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11088:33:1;;;;;;;;;;;;;;;;11062:59;;11137:12;11131:32;;;11164:4;11169:2;11172:11;11131:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11131:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11131:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11131:53:1;;;;;;;;;;;;;;;;;11252:12;11246:29;;;11276:2;11246:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11246:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11246:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11246:33:1;;;;;;;;;;;;;;;;11230:11;11214:15;:27;11213:66;11194:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11371:14;:12;:14::i;:::-;11352:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11520:2;11481:110;;11514:4;11481:110;;;11524:12;11538:11;11551:13;11566:8;11576:5;11481:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:1;11811:8;:12;11807:822;;;12410:12;12404:32;;;12437:4;12443:10;12455:8;12404:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12404:60:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12404:60:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12404:60:1;;;;;;;;;;;;;;;;;12503:14;:12;:14::i;:::-;12478:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11807:822;12646:4;12639:11;;;;9566:3091;;;;;;;;;;:::o;6470:1261::-;7088:4;7108:24;7135:110;7168:4;7174:2;7178:12;7192:11;7205:13;7220:8;7230:5;7135:19;:110::i;:::-;7108:137;;7255:14;7272:50;7294:16;7312:9;7272:21;:50::i;:::-;7255:67;;7332:17;7358:12;7352:29;;;7382:4;7396;7352:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7352:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7352:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7352:50:1;;;;;;;;;;;;;;;;7332:70;;7412:15;7436:12;7430:29;;;7460:4;7430:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7430:35:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7430:35:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7430:35:1;;;;;;;;;;;;;;;;7412:53;;7507:4;7497:14;;:6;:14;;;:40;;;;;7535:2;7527:10;;:4;:10;;;;7497:40;:111;;;;;7572:18;:36;7591:16;7572:36;;;;;;;;;;;;7553:15;:55;;7497:111;:165;;;;;7637:25;7653:8;7637:11;:15;;:25;;;;:::i;:::-;7624:9;:38;;7497:165;:217;;;;;7689:25;7705:8;7689:11;:15;;:25;;;;:::i;:::-;7678:7;:36;;7497:217;7476:248;;;;;;6470:1261;;;;;;;;;;:::o;1854:53::-;;;;;;;;;;;;;;;;;:::o;2650:265:2:-;2719:7;2902:4;2849:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2849:58:2;;;2839:69;;;;;;2832:76;;2650:265;;;:::o;609:1891::-;687:7;768:2;748:9;:16;:22;;744:72;;;802:1;786:19;;;;744:72;882:9;901;920:7;1166:4;1155:9;1151:20;1145:27;1140:32;;1211:4;1200:9;1196:20;1190:27;1185:32;;1264:4;1253:9;1249:20;1243:27;1240:1;1235:36;1230:41;;2182:66;2177:1;2169:10;;;:79;2165:127;;;2279:1;2264:17;;;;;;;2165:127;2311:2;2306:1;:7;;;;:18;;;;;2322:2;2317:1;:7;;;;2306:18;2302:66;;;2355:1;2340:17;;;;;;;2302:66;2469:24;2479:4;2485:1;2488;2491;2469:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2469:24:2;;;;;;;;2462:31;;;;;609:1891;;;;;:::o;1439:145:3:-;1497:7;1516:9;1532:1;1528;:5;1516:17;;1556:1;1551;:6;;1543:15;;;;;;;;1576:1;1569:8;;;1439:145;;;;:::o;13072:855:1:-;13147:4;13167:19;13189:1;13167:23;;13368:14;13450:3;13445:57;;;;13573:4;13568:220;;;;13361:516;;13445:57;13487:1;13472:16;;13445:57;;13568:220;13673:4;13668:3;13663;13648:30;13770:3;13764:10;13749:25;;13361:516;;13919:1;13904:11;:16;;13897:23;;;13072:855;:::o", + "source": "pragma solidity ^0.5.2;\n\n/*\n Super Simple Token Subscriptions - https://tokensubscription.com\n //// Breakin’ Through @ University of Wyoming ////\n Austin Thomas Griffith - https://austingriffith.com\n Building on previous works:\n https://github.com/austintgriffith/token-subscription\n https://gist.github.com/androolloyd/0a62ef48887be00a5eff5c17f2be849a\n https://media.consensys.net/subscription-services-on-the-blockchain-erc-948-6ef64b083a36\n https://medium.com/gitcoin/technical-deep-dive-architecture-choices-for-subscriptions-on-the-blockchain-erc948-5fae89cabc7a\n https://github.com/ethereum/EIPs/pull/1337\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1077.md\n https://github.com/gnosis/safe-contracts\n Earlier Meta Transaction Demo:\n https://github.com/austintgriffith/bouncer-proxy\n Huge thanks, as always, to OpenZeppelin for the rad contracts:\n */\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\n\n\ncontract Subscription {\n using ECDSA for bytes32;\n using SafeMath for uint256;\n\n //who deploys the contract\n address payable public author;\n\n //restrict who can relay the metatx\n address public relayer;\n\n // the publisher may optionally deploy requirements for the subscription\n // so only meta transactions that match the requirements can be relayed\n address public requiredToAddress;\n address public requiredTokenAddress;\n uint256 public requiredTokenAmount;\n uint256 public requiredPeriodSeconds;\n uint256 public requiredGasPrice;\n\n\n // similar to a nonce that avoids replay attacks this allows a single execution\n // every x seconds for a given subscription\n // subscriptionHash => next valid block number\n mapping(bytes32 => uint256) public nextValidTimestamp;\n\n //we'll use a nonce for each from but because transactions can go through\n //multiple times, we allow anything but users can use this as a signal for\n //uniqueness\n mapping(address => uint256) public extraNonce;\n\n event ExecuteSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event CancelSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n constructor(\n address _toAddress,\n address _tokenAddress,\n uint256 _tokenAmount,\n uint256 _periodSeconds,\n uint256 _gasPrice,\n uint8 _version,\n address _relayer\n ) public {\n requiredToAddress=_toAddress;\n requiredTokenAddress=_tokenAddress;\n requiredTokenAmount=_tokenAmount;\n requiredPeriodSeconds=_periodSeconds;\n requiredGasPrice=_gasPrice;\n author=msg.sender;\n relayer=_relayer;\n }\n\n // this is used by external smart contracts to verify on-chain that a\n // particular subscription is \"paid\" and \"active\"\n // there must be a small grace period added to allow the publisher\n // or desktop miner to execute\n function isSubscriptionActive(\n bytes32 subscriptionHash,\n uint256 gracePeriodSeconds\n )\n external\n view\n returns (bool)\n {\n if(nextValidTimestamp[subscriptionHash]==uint256(-1)){\n return false;\n }\n return (block.timestamp <=\n nextValidTimestamp[subscriptionHash].add(gracePeriodSeconds)\n );\n }\n\n // given the subscription details, generate a hash and try to kind of follow\n // the eip-191 standard and eip-1077 standard from my dude @avsa\n function getSubscriptionHash(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n )\n public\n view\n returns (bytes32)\n {\n // if there are requirements from the deployer, let's make sure\n // those are met exactly\n require( requiredToAddress == address(0) || to == requiredToAddress, \"requiredToAddress Failure\" );\n require( requiredTokenAddress == address(0) || tokenAddress == requiredTokenAddress, \"requiredTokenAddress Failure\" );\n require( requiredTokenAmount == 0 || tokenAmount == requiredTokenAmount, \"requiredTokenAmount Failure\" );\n require( requiredPeriodSeconds == 0 || periodSeconds == requiredPeriodSeconds, \"requiredPeriodSeconds Failure\" );\n require( requiredGasPrice == 0 || gasPrice == requiredGasPrice, \"requiredGasPrice Failure\" );\n\n return keccak256(\n abi.encodePacked(\n byte(0x19),\n byte(0),\n address(this),\n from,\n to,\n tokenAddress,\n tokenAmount,\n periodSeconds,\n gasPrice\n ));\n }\n\n //ecrecover the signer from hash and the signature\n function getSubscriptionSigner(\n bytes32 subscriptionHash, //hash of subscription\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n pure\n returns (address)\n {\n return subscriptionHash.toEthSignedMessageHash().recover(signature);\n }\n\n //check if a subscription is signed correctly and the timestamp is ready for\n // the next execution to happen\n function isSubscriptionReady(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of the token to incentivize the relay network\n uint256 nonce,// to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n view\n returns (bool)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n uint256 allowance = ERC20(tokenAddress).allowance(from, address(this));\n uint256 balance = ERC20(tokenAddress).balanceOf(from);\n\n return (\n signer == from &&\n from != to &&\n block.timestamp >= nextValidTimestamp[subscriptionHash] &&\n allowance >= tokenAmount.add(gasPrice) &&\n balance >= tokenAmount.add(gasPrice)\n );\n }\n\n // you don't really need this if you are using the approve/transferFrom method\n // because you control the flow of tokens by approving this contract address,\n // but to make the contract an extensible example for later user I'll add this\n function cancelSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, //to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n\n //the signature must be valid\n require(signer == from, \"Invalid Signature for subscription cancellation\");\n\n //make sure it's the subscriber\n require(from == msg.sender, 'msg.sender is not the subscriber');\n\n //nextValidTimestamp should be a timestamp that will never\n //be reached during the brief window human existence\n nextValidTimestamp[subscriptionHash]=uint256(-1);\n\n emit CancelSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n return true;\n }\n\n // execute the transferFrom to pay the publisher from the subscriber\n // the subscriber has full control by approving this contract an allowance\n function executeSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, // to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n require(msg.sender == relayer);\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // make sure the subscription is valid and ready\n require( isSubscriptionReady(from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce, signature), \"Subscription is not ready or conditions of transction are not met\" );\n\n //increment the timestamp by the period so it wont be valid until then\n nextValidTimestamp[subscriptionHash] = block.timestamp.add(periodSeconds);\n\n //check to see if this nonce is larger than the current count and we'll set that for this 'from'\n if(nonce > extraNonce[from]){\n extraNonce[from] = nonce;\n }\n\n // now, let make the transfer from the subscriber to the publisher\n uint256 startingBalance = ERC20(tokenAddress).balanceOf(to);\n ERC20(tokenAddress).transferFrom(from,to,tokenAmount);\n require(\n (startingBalance+tokenAmount) == ERC20(tokenAddress).balanceOf(to),\n \"ERC20 Balance did not change correctly\"\n );\n\n require(\n checkSuccess(),\n \"Subscription::executeSubscription TransferFrom failed\"\n );\n\n\n emit ExecuteSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // it is possible for the subscription execution to be run by a third party\n // incentivized in the terms of the subscription with a gasPrice of the tokens\n // - pay that out now...\n if (gasPrice > 0) {\n //the relayer is incentivized by a little of the same token from\n // the subscriber ... as far as the subscriber knows, they are\n // just sending X tokens to the publisher, but the publisher can\n // choose to send Y of those X to a relayer to run their transactions\n // the publisher will receive X - Y tokens\n // this must all be setup in the constructor\n // if not, the subscriber chooses all the params including what goes\n // to the publisher and what goes to the relayer\n ERC20(tokenAddress).transferFrom(from, msg.sender, gasPrice);\n require(\n checkSuccess(),\n \"Subscription::executeSubscription Failed to pay gas as from account\"\n );\n }\n\n return true;\n }\n\n // because of issues with non-standard erc20s the transferFrom can always return false\n // to fix this we run it and then check the return of the previous function:\n // https://github.com/ethereum/solidity/issues/4116\n /**\n * Checks the return value of the previous function. Returns true if the previous function\n * function returned 32 non-zero bytes or returned zero bytes.\n */\n function checkSuccess(\n )\n private\n pure\n returns (bool)\n {\n uint256 returnValue = 0;\n\n /* solium-disable-next-line security/no-inline-assembly */\n assembly {\n // check number of bytes returned from last function call\n switch returndatasize\n\n // no bytes returned: assume success\n case 0x0 {\n returnValue := 1\n }\n\n // 32 bytes returned: check if non-zero\n case 0x20 {\n // copy 32 bytes into scratch space\n returndatacopy(0x0, 0x0, 0x20)\n\n // load those bytes into returnValue\n returnValue := mload(0x0)\n }\n\n // not sure what was returned: dont mark as success\n default { }\n }\n\n return returnValue != 0;\n }\n\n //we would like a way for the author to completly destroy the subscription\n // contract to prevent further transfers\n function endContract()\n external\n {\n require(msg.sender==author);\n selfdestruct(author);\n }\n\n // let's go ahead and revert any ETH sent directly to the contract\n function () external payable {\n revert ();\n }\n}\n", + "sourcePath": "/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol", + "ast": { + "absolutePath": "/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol", + "exportedSymbols": { + "Subscription": [ + 675 + ] + }, + "id": 676, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 58, + "literals": [ + "solidity", + "^", + "0.5", + ".2" + ], + "nodeType": "PragmaDirective", + "src": "0:23:1" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol", + "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol", + "id": 59, + "nodeType": "ImportDirective", + "scope": 676, + "sourceUnit": 757, + "src": "900:64:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", + "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", + "id": 60, + "nodeType": "ImportDirective", + "scope": 676, + "sourceUnit": 885, + "src": "965:59:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", + "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", + "id": 61, + "nodeType": "ImportDirective", + "scope": 676, + "sourceUnit": 1268, + "src": "1025:63:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 675, + "linearizedBaseContracts": [ + 675 + ], + "name": "Subscription", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 64, + "libraryName": { + "contractScope": null, + "id": 62, + "name": "ECDSA", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 756, + "src": "1125:5:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ECDSA_$756", + "typeString": "library ECDSA" + } + }, + "nodeType": "UsingForDirective", + "src": "1119:24:1", + "typeName": { + "id": 63, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1135:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "id": 67, + "libraryName": { + "contractScope": null, + "id": 65, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 884, + "src": "1154:8:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$884", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1148:27:1", + "typeName": { + "id": 66, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1167:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 69, + "name": "author", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1212:29:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 68, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1212:15:1", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 71, + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1288:22:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 70, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1288:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 73, + "name": "requiredToAddress", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1470:32:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 72, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1470:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 75, + "name": "requiredTokenAddress", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1508:35:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 74, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1508:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 77, + "name": "requiredTokenAmount", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1549:34:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 76, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1549:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 79, + "name": "requiredPeriodSeconds", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1589:36:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1589:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 81, + "name": "requiredGasPrice", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1631:31:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 80, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1631:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 85, + "name": "nextValidTimestamp", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1854:53:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 84, + "keyType": { + "id": 82, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1862:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1854:27:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 83, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1873:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 89, + "name": "extraNonce", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "2088:45:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 88, + "keyType": { + "id": 86, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2096:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2088:27:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 87, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2107:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": null, + "id": 105, + "name": "ExecuteSubscription", + "nodeType": "EventDefinition", + "parameters": { + "id": 104, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 91, + "indexed": true, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2175:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 90, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2175:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 93, + "indexed": true, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2222:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 92, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2222:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 95, + "indexed": false, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2266:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 94, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2266:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 97, + "indexed": false, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2338:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 96, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2338:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 99, + "indexed": false, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2408:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 98, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2408:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 101, + "indexed": false, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2480:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 100, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2480:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 103, + "indexed": false, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2557:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2557:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2165:471:1" + }, + "src": "2140:497:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 121, + "name": "CancelSubscription", + "nodeType": "EventDefinition", + "parameters": { + "id": 120, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 107, + "indexed": true, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2677:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 106, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2677:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 109, + "indexed": true, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2724:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 108, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2724:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 111, + "indexed": false, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2768:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 110, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2768:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 113, + "indexed": false, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2840:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 112, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2840:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 115, + "indexed": false, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2910:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 114, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2910:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 117, + "indexed": false, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2982:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 116, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2982:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 119, + "indexed": false, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "3059:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 118, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3059:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2667:471:1" + }, + "src": "2643:496:1" + }, + { + "body": { + "id": 167, + "nodeType": "Block", + "src": "3368:266:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 138, + "name": "requiredToAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 73, + "src": "3378:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 139, + "name": "_toAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 123, + "src": "3396:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3378:28:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 141, + "nodeType": "ExpressionStatement", + "src": "3378:28:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 142, + "name": "requiredTokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "3416:20:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 143, + "name": "_tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "3437:13:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3416:34:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 145, + "nodeType": "ExpressionStatement", + "src": "3416:34:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 146, + "name": "requiredTokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "3460:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 147, + "name": "_tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 127, + "src": "3480:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3460:32:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 149, + "nodeType": "ExpressionStatement", + "src": "3460:32:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 150, + "name": "requiredPeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79, + "src": "3502:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 151, + "name": "_periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 129, + "src": "3524:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3502:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 153, + "nodeType": "ExpressionStatement", + "src": "3502:36:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 154, + "name": "requiredGasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 81, + "src": "3548:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 155, + "name": "_gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 131, + "src": "3565:9:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3548:26:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 157, + "nodeType": "ExpressionStatement", + "src": "3548:26:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 158, + "name": "author", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3584:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 159, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "3591:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3591:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3584:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 162, + "nodeType": "ExpressionStatement", + "src": "3584:17:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 165, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 163, + "name": "relayer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "3611:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 164, + "name": "_relayer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 135, + "src": "3619:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3611:16:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 166, + "nodeType": "ExpressionStatement", + "src": "3611:16:1" + } + ] + }, + "documentation": null, + "id": 168, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 136, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 123, + "name": "_toAddress", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3166:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 122, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3166:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 125, + "name": "_tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3194:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 124, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3194:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 127, + "name": "_tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3225:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 126, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3225:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 129, + "name": "_periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3255:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 128, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3255:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 131, + "name": "_gasPrice", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3287:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 130, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3287:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 133, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3314:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 132, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3314:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 135, + "name": "_relayer", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3338:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 134, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3338:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3156:204:1" + }, + "returnParameters": { + "id": 137, + "nodeType": "ParameterList", + "parameters": [], + "src": "3368:0:1" + }, + "scope": 675, + "src": "3145:489:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 200, + "nodeType": "Block", + "src": "4037:227:1", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 177, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "4050:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 179, + "indexExpression": { + "argumentTypes": null, + "id": 178, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 170, + "src": "4069:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4050:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 182, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "4096:2:1", + "subExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4097:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + ], + "id": 180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4088:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": "uint256" + }, + "id": 183, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4088:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4050:49:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 188, + "nodeType": "IfStatement", + "src": "4047:88:1", + "trueBody": { + "id": 187, + "nodeType": "Block", + "src": "4100:35:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 185, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4119:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 176, + "id": 186, + "nodeType": "Return", + "src": "4112:12:1" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 189, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "4152:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4152:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 195, + "name": "gracePeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 172, + "src": "4228:18:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 191, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "4187:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 193, + "indexExpression": { + "argumentTypes": null, + "id": 192, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 170, + "src": "4206:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4187:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "4187:40:1", + "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": 196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4187:60:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4152:95:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 198, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4151:106:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 176, + "id": 199, + "nodeType": "Return", + "src": "4144:113:1" + } + ] + }, + "documentation": null, + "id": 201, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isSubscriptionActive", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 173, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 170, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 201, + "src": "3913:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 169, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3913:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 172, + "name": "gracePeriodSeconds", + "nodeType": "VariableDeclaration", + "scope": 201, + "src": "3947:26:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 171, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3947:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3903:76:1" + }, + "returnParameters": { + "id": 176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 175, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 201, + "src": "4027:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 174, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4027:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4026:6:1" + }, + "scope": 675, + "src": "3874:390:1", + "stateMutability": "view", + "superFunction": null, + "visibility": "external" + }, + { + "body": { + "id": 300, + "nodeType": "Block", + "src": "4969:999:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 221, + "name": "requiredToAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 73, + "src": "5093:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 223, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5122: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": 222, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5114:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 224, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5114:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5093:31:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 226, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 205, + "src": "5128:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 227, + "name": "requiredToAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 73, + "src": "5134:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5128:23:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5093:58:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564546f41646472657373204661696c757265", + "id": 230, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5153:27:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430", + "typeString": "literal_string \"requiredToAddress Failure\"" + }, + "value": "requiredToAddress Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430", + "typeString": "literal_string \"requiredToAddress Failure\"" + } + ], + "id": 220, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5084:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5084:98:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 232, + "nodeType": "ExpressionStatement", + "src": "5084:98:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 234, + "name": "requiredTokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "5201:20:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 236, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5233: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": 235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5225:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5225:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5201:34:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 239, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "5239:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 240, + "name": "requiredTokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "5255:20:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5239:36:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5201:74:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564546f6b656e41646472657373204661696c757265", + "id": 243, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5277:30:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c", + "typeString": "literal_string \"requiredTokenAddress Failure\"" + }, + "value": "requiredTokenAddress Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c", + "typeString": "literal_string \"requiredTokenAddress Failure\"" + } + ], + "id": 233, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5192:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5192:118:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 245, + "nodeType": "ExpressionStatement", + "src": "5192:118:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 247, + "name": "requiredTokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "5329:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 248, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5352:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5329:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 250, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 209, + "src": "5357:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 251, + "name": "requiredTokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "5372:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5357:34:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5329:62:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564546f6b656e416d6f756e74204661696c757265", + "id": 254, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5393:29:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785", + "typeString": "literal_string \"requiredTokenAmount Failure\"" + }, + "value": "requiredTokenAmount Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785", + "typeString": "literal_string \"requiredTokenAmount Failure\"" + } + ], + "id": 246, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5320:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5320:105:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 256, + "nodeType": "ExpressionStatement", + "src": "5320:105:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 258, + "name": "requiredPeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79, + "src": "5444:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 259, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5469:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5444:26:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 261, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 211, + "src": "5474:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 262, + "name": "requiredPeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79, + "src": "5491:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5474:38:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5444:68:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564506572696f645365636f6e6473204661696c757265", + "id": 265, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5514:31:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b", + "typeString": "literal_string \"requiredPeriodSeconds Failure\"" + }, + "value": "requiredPeriodSeconds Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b", + "typeString": "literal_string \"requiredPeriodSeconds Failure\"" + } + ], + "id": 257, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5435:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5435:113:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 267, + "nodeType": "ExpressionStatement", + "src": "5435:113:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 269, + "name": "requiredGasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 81, + "src": "5567:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5587:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5567:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 272, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 213, + "src": "5592:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 273, + "name": "requiredGasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 81, + "src": "5604:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5592:28:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5567:53:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "72657175697265644761735072696365204661696c757265", + "id": 276, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5622:26:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb", + "typeString": "literal_string \"requiredGasPrice Failure\"" + }, + "value": "requiredGasPrice Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb", + "typeString": "literal_string \"requiredGasPrice Failure\"" + } + ], + "id": 268, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5558:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5558:93:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 278, + "nodeType": "ExpressionStatement", + "src": "5558:93:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30783139", + "id": 283, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5731:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_25_by_1", + "typeString": "int_const 25" + }, + "value": "0x19" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_25_by_1", + "typeString": "int_const 25" + } + ], + "id": 282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5726:4:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes1_$", + "typeString": "type(bytes1)" + }, + "typeName": "byte" + }, + "id": 284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5726:10:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 286, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5759: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": 285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5754:4:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes1_$", + "typeString": "type(bytes1)" + }, + "typeName": "byte" + }, + "id": 287, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5754:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 289, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1374, + "src": "5787:4:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + ], + "id": 288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5779:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5779:13:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 291, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "5810:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 292, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 205, + "src": "5832:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 293, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "5852:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 294, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 209, + "src": "5882:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 295, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 211, + "src": "5911:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 296, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 213, + "src": "5942:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 280, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1338, + "src": "5692:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 281, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5692:16:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5692:268:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 279, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1345, + "src": "5669:9:1", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5669:292:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 219, + "id": 299, + "nodeType": "Return", + "src": "5662:299:1" + } + ] + }, + "documentation": null, + "id": 301, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSubscriptionHash", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 203, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4458:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 202, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4458:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 205, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4497:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 204, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4497:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 207, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4533:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4533:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 209, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4605:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 208, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4605:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 211, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4675:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 210, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4675:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 213, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4747:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4747:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 215, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4831:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4831:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4448:462:1" + }, + "returnParameters": { + "id": 219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 218, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4956:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 217, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4956:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4955:9:1" + }, + "scope": 675, + "src": "4420:1548:1", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 317, + "nodeType": "Block", + "src": "6263:84:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 314, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 305, + "src": "6330:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 310, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 303, + "src": "6280:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toEthSignedMessageHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 755, + "src": "6280:39:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (bytes32)" + } + }, + "id": 312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6280:41:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "recover", + "nodeType": "MemberAccess", + "referencedDeclaration": 739, + "src": "6280:49:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6280:60:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 309, + "id": 316, + "nodeType": "Return", + "src": "6273:67:1" + } + ] + }, + "documentation": null, + "id": 318, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSubscriptionSigner", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 303, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "6069:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 302, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6069:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 305, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "6126:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 304, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6126:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6059:145:1" + }, + "returnParameters": { + "id": 309, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 308, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "6250:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 307, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6250:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6249:9:1" + }, + "scope": 675, + "src": "6029:318:1", + "stateMutability": "pure", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 409, + "nodeType": "Block", + "src": "7098:633:1", + "statements": [ + { + "assignments": [ + 340 + ], + "declarations": [ + { + "constant": false, + "id": 340, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7108:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 339, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7108:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 350, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 342, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7168:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 343, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "7174:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 344, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "7178:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 345, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "7192:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 346, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 328, + "src": "7205:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 347, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 330, + "src": "7220:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 348, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 332, + "src": "7230:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 341, + "name": "getSubscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 301, + "src": "7135:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" + } + }, + "id": 349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7135:110:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7108:137:1" + }, + { + "assignments": [ + 352 + ], + "declarations": [ + { + "constant": false, + "id": 352, + "name": "signer", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7255:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 351, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7255:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 357, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 354, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 340, + "src": "7294:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 355, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 334, + "src": "7312:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 353, + "name": "getSubscriptionSigner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "7272:21:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7272:50:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7255:67:1" + }, + { + "assignments": [ + 359 + ], + "declarations": [ + { + "constant": false, + "id": 359, + "name": "allowance", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7332:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7332:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 369, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 364, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7382:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 366, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1374, + "src": "7396:4:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + ], + "id": 365, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7388:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7388:13:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 361, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "7358:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 360, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "7352:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7352:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "allowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 941, + "src": "7352:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view external returns (uint256)" + } + }, + "id": 368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7352:50:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7332:70:1" + }, + { + "assignments": [ + 371 + ], + "declarations": [ + { + "constant": false, + "id": 371, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7412:15:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7412:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 378, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 376, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7460:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 373, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "7436:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 372, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "7430:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7430:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 925, + "src": "7430:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7430:35:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7412:53:1" + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 379, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 352, + "src": "7497:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 380, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7507:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7497:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 382, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7527:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "id": 383, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "7535:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7527:10:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:40:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 386, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "7553:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7553:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 388, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "7572:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 390, + "indexExpression": { + "argumentTypes": null, + "id": 389, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 340, + "src": "7591:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7572:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7553:55:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:111:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 393, + "name": "allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 359, + "src": "7624:9:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 396, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 330, + "src": "7653:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 394, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "7637:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "7637:15:1", + "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": 397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7637:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7624:38:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:165:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 400, + "name": "balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 371, + "src": "7678:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 403, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 330, + "src": "7705:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 401, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "7689:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "7689:15:1", + "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": 404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7689:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7678:36:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:217:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 407, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7483:241:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 338, + "id": 408, + "nodeType": "Return", + "src": "7476:248:1" + } + ] + }, + "documentation": null, + "id": 410, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isSubscriptionReady", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 335, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6508:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6508:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6547:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 321, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6547:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 324, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6583:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 323, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6583:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 326, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6655:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6655:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 328, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6725:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6725:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 330, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6797:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 329, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6797:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 332, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6882:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 331, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6882:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 334, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6964:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 333, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6964:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6498:544:1" + }, + "returnParameters": { + "id": 338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 337, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "7088:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 336, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7088:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7087:6:1" + }, + "scope": 675, + "src": "6470:1261:1", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 486, + "nodeType": "Block", + "src": "8606:802:1", + "statements": [ + { + "assignments": [ + 432 + ], + "declarations": [ + { + "constant": false, + "id": 432, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 486, + "src": "8616:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 431, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8616:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 442, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 434, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "8676:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 435, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 414, + "src": "8682:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 436, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 416, + "src": "8686:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 437, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 418, + "src": "8700:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 438, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 420, + "src": "8713:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 439, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 422, + "src": "8728:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 440, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 424, + "src": "8738:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 433, + "name": "getSubscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 301, + "src": "8643:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" + } + }, + "id": 441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8643:110:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8616:137:1" + }, + { + "assignments": [ + 444 + ], + "declarations": [ + { + "constant": false, + "id": 444, + "name": "signer", + "nodeType": "VariableDeclaration", + "scope": 486, + "src": "8763:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 443, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8763:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 449, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 446, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 432, + "src": "8802:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 447, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 426, + "src": "8820:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 445, + "name": "getSubscriptionSigner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "8780:21:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 448, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8780:50:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8763:67:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 453, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 451, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 444, + "src": "8887:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 452, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "8897:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "8887:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e", + "id": 454, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8903:49:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b", + "typeString": "literal_string \"Invalid Signature for subscription cancellation\"" + }, + "value": "Invalid Signature for subscription cancellation" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b", + "typeString": "literal_string \"Invalid Signature for subscription cancellation\"" + } + ], + "id": 450, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "8879:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8879:74:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 456, + "nodeType": "ExpressionStatement", + "src": "8879:74:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 458, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "9012:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 459, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "9020:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9020:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "9012:18:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "6d73672e73656e646572206973206e6f74207468652073756273637269626572", + "id": 462, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9032:34:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79", + "typeString": "literal_string \"msg.sender is not the subscriber\"" + }, + "value": "msg.sender is not the subscriber" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79", + "typeString": "literal_string \"msg.sender is not the subscriber\"" + } + ], + "id": 457, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "9004:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9004:63:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 464, + "nodeType": "ExpressionStatement", + "src": "9004:63:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 465, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "9206:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 467, + "indexExpression": { + "argumentTypes": null, + "id": 466, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 432, + "src": "9225:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9206:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 470, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "9251:2:1", + "subExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 469, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9252:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + ], + "id": 468, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9243:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": "uint256" + }, + "id": 471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9243:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9206:48:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 473, + "nodeType": "ExpressionStatement", + "src": "9206:48:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 475, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "9302:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 476, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 414, + "src": "9308:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 477, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 416, + "src": "9312:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 478, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 418, + "src": "9326:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 479, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 420, + "src": "9339:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 480, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 422, + "src": "9354:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 481, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 424, + "src": "9364:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 474, + "name": "CancelSubscription", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 121, + "src": "9270:18:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" + } + }, + "id": 482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9270:109:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 483, + "nodeType": "EmitStatement", + "src": "9265:114:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 484, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9397:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 430, + "id": 485, + "nodeType": "Return", + "src": "9390:11:1" + } + ] + }, + "documentation": null, + "id": 487, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "cancelSubscription", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 427, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 412, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8022:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 411, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8022:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 414, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8061:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 413, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8061:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 416, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8097:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 415, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8097:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 418, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8169:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 417, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8169:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 420, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8239:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 419, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8239:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 422, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8311:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8311:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 424, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8395:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 423, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8395:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 426, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8477:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 425, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8477:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8012:543:1" + }, + "returnParameters": { + "id": 430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 429, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8588:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 428, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8588:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8587:14:1" + }, + "scope": 675, + "src": "7985:1423:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 636, + "nodeType": "Block", + "src": "10189:2468:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 509, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "10207:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10207:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 511, + "name": "relayer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "10221:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "10207:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 508, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1354, + "src": "10199:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10199:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 514, + "nodeType": "ExpressionStatement", + "src": "10199:30:1" + }, + { + "assignments": [ + 516 + ], + "declarations": [ + { + "constant": false, + "id": 516, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 636, + "src": "10239:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 515, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10239:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 526, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 518, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10299:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 519, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "10305:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 520, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "10309:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 521, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "10323:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 522, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "10336:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 523, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "10351:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 524, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10361:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 517, + "name": "getSubscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 301, + "src": "10266:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" + } + }, + "id": 525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10266:110:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10239:137:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 529, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10473:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 530, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "10479:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 531, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "10483:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 532, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "10497:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 533, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "10510:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 534, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "10525:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 535, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10535:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 536, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 503, + "src": "10542:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 528, + "name": "isSubscriptionReady", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 410, + "src": "10453:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)" + } + }, + "id": 537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10453:99:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574", + "id": 538, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10554:67:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3", + "typeString": "literal_string \"Subscription is not ready or conditions of transction are not met\"" + }, + "value": "Subscription is not ready or conditions of transction are not met" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3", + "typeString": "literal_string \"Subscription is not ready or conditions of transction are not met\"" + } + ], + "id": 527, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "10444:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10444:179:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 540, + "nodeType": "ExpressionStatement", + "src": "10444:179:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 541, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "10713:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 543, + "indexExpression": { + "argumentTypes": null, + "id": 542, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 516, + "src": "10732:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10713:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 547, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "10772:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 544, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "10752:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10752:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "10752:19:1", + "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": 548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10752:34:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10713:73:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 550, + "nodeType": "ExpressionStatement", + "src": "10713:73:1" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 551, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10905:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 552, + "name": "extraNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89, + "src": "10913:10:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 554, + "indexExpression": { + "argumentTypes": null, + "id": 553, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10924:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10913:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10905:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 563, + "nodeType": "IfStatement", + "src": "10902:75:1", + "trueBody": { + "id": 562, + "nodeType": "Block", + "src": "10930:47:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 556, + "name": "extraNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89, + "src": "10942:10:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 558, + "indexExpression": { + "argumentTypes": null, + "id": 557, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10953:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10942:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 559, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10961:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10942:24:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 561, + "nodeType": "ExpressionStatement", + "src": "10942:24:1" + } + ] + } + }, + { + "assignments": [ + 565 + ], + "declarations": [ + { + "constant": false, + "id": 565, + "name": "startingBalance", + "nodeType": "VariableDeclaration", + "scope": 636, + "src": "11062:23:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 564, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11062:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 572, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 570, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11118:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 567, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11094:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 566, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "11088:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11088:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 925, + "src": "11088:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11088:33:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11062:59:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 577, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "11164:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 578, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11169:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 579, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "11172:11:1", + "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, + "arguments": [ + { + "argumentTypes": null, + "id": 574, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11137:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 573, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "11131:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11131:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1014, + "src": "11131:32:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11131:53:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 581, + "nodeType": "ExpressionStatement", + "src": "11131:53:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 583, + "name": "startingBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "11214:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 584, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "11230:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11214:27:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 586, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11213:29:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 591, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11276:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 588, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11252:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 587, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "11246:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11246:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 925, + "src": "11246:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11246:33:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11213:66:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79", + "id": 594, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11291:40:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7", + "typeString": "literal_string \"ERC20 Balance did not change correctly\"" + }, + "value": "ERC20 Balance did not change correctly" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7", + "typeString": "literal_string \"ERC20 Balance did not change correctly\"" + } + ], + "id": 582, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "11194:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11194:147:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 596, + "nodeType": "ExpressionStatement", + "src": "11194:147:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 598, + "name": "checkSuccess", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 652, + "src": "11371:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", + "typeString": "function () pure returns (bool)" + } + }, + "id": 599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11371:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564", + "id": 600, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11397:55:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28", + "typeString": "literal_string \"Subscription::executeSubscription TransferFrom failed\"" + }, + "value": "Subscription::executeSubscription TransferFrom failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28", + "typeString": "literal_string \"Subscription::executeSubscription TransferFrom failed\"" + } + ], + "id": 597, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "11352:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 601, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11352:112:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 602, + "nodeType": "ExpressionStatement", + "src": "11352:112:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 604, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "11514:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 605, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11520:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 606, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11524:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 607, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "11538:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 608, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "11551:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 609, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "11566:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 610, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "11576:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 603, + "name": "ExecuteSubscription", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 105, + "src": "11481:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" + } + }, + "id": 611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11481:110:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 612, + "nodeType": "EmitStatement", + "src": "11476:115:1" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 613, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "11811:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 614, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11822:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11811:12:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 633, + "nodeType": "IfStatement", + "src": "11807:822:1", + "trueBody": { + "id": 632, + "nodeType": "Block", + "src": "11825:804:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 620, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "12437:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 621, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "12443:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "12443:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 623, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "12455:8:1", + "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" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 617, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "12410:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 616, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "12404:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12404:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1014, + "src": "12404:32:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12404:60:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 625, + "nodeType": "ExpressionStatement", + "src": "12404:60:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 627, + "name": "checkSuccess", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 652, + "src": "12503:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", + "typeString": "function () pure returns (bool)" + } + }, + "id": 628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12503:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74", + "id": 629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12535:69:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7", + "typeString": "literal_string \"Subscription::executeSubscription Failed to pay gas as from account\"" + }, + "value": "Subscription::executeSubscription Failed to pay gas as from account" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7", + "typeString": "literal_string \"Subscription::executeSubscription Failed to pay gas as from account\"" + } + ], + "id": 626, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "12478:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12478:140:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 631, + "nodeType": "ExpressionStatement", + "src": "12478:140:1" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12646:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 507, + "id": 635, + "nodeType": "Return", + "src": "12639:11:1" + } + ] + }, + "documentation": null, + "id": 637, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "executeSubscription", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 489, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9604:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 488, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9604:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 491, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9643:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 490, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9643:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 493, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9679:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 492, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9679:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 495, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9751:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 494, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9751:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 497, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9821:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 496, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9821:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 499, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9893:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 498, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9893:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 501, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9977:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 500, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9977:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 503, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "10060:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 502, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10060:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9594:544:1" + }, + "returnParameters": { + "id": 507, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 506, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "10171:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 505, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10171:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10170:14:1" + }, + "scope": 675, + "src": "9566:3091:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 651, + "nodeType": "Block", + "src": "13157:770:1", + "statements": [ + { + "assignments": [ + 643 + ], + "declarations": [ + { + "constant": false, + "id": 643, + "name": "returnValue", + "nodeType": "VariableDeclaration", + "scope": 651, + "src": "13167:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 642, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13167:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 645, + "initialValue": { + "argumentTypes": null, + "hexValue": "30", + "id": 644, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13189:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13167:23:1" + }, + { + "externalReferences": [ + { + "returnValue": { + "declaration": 643, + "isOffset": false, + "isSlot": false, + "src": "13472:11:1", + "valueSize": 1 + } + }, + { + "returnValue": { + "declaration": 643, + "isOffset": false, + "isSlot": false, + "src": "13749:11:1", + "valueSize": 1 + } + } + ], + "id": 646, + "nodeType": "InlineAssembly", + "operations": "{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}", + "src": "13268:635:1" + }, + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 647, + "name": "returnValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 643, + "src": "13904:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 648, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13919:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13904:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 641, + "id": 650, + "nodeType": "Return", + "src": "13897:23:1" + } + ] + }, + "documentation": "Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.", + "id": 652, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "checkSuccess", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 638, + "nodeType": "ParameterList", + "parameters": [], + "src": "13093:7:1" + }, + "returnParameters": { + "id": 641, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 640, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 652, + "src": "13147:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 639, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13147:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "13146:6:1" + }, + "scope": 675, + "src": "13072:855:1", + "stateMutability": "pure", + "superFunction": null, + "visibility": "private" + }, + { + "body": { + "id": 666, + "nodeType": "Block", + "src": "14101:70:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "id": 659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 656, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "14117:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 657, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "14117:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 658, + "name": "author", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "14129:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "14117:18:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 655, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1354, + "src": "14109:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14109:27:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 661, + "nodeType": "ExpressionStatement", + "src": "14109:27:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 663, + "name": "author", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "14157:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 662, + "name": "selfdestruct", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1359, + "src": "14144:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$", + "typeString": "function (address payable)" + } + }, + "id": 664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14144:20:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 665, + "nodeType": "ExpressionStatement", + "src": "14144:20:1" + } + ] + }, + "documentation": null, + "id": 667, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "endContract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 653, + "nodeType": "ParameterList", + "parameters": [], + "src": "14077:2:1" + }, + "returnParameters": { + "id": 654, + "nodeType": "ParameterList", + "parameters": [], + "src": "14101:0:1" + }, + "scope": 675, + "src": "14057:114:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "external" + }, + { + "body": { + "id": 673, + "nodeType": "Block", + "src": "14277:25:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 670, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1356, + 1357 + ], + "referencedDeclaration": 1356, + "src": "14286:6:1", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14286:9:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 672, + "nodeType": "ExpressionStatement", + "src": "14286:9:1" + } + ] + }, + "documentation": null, + "id": 674, + "implemented": true, + "kind": "fallback", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 668, + "nodeType": "ParameterList", + "parameters": [], + "src": "14257:2:1" + }, + "returnParameters": { + "id": 669, + "nodeType": "ParameterList", + "parameters": [], + "src": "14277:0:1" + }, + "scope": 675, + "src": "14248:54:1", + "stateMutability": "payable", + "superFunction": null, + "visibility": "external" + } + ], + "scope": 676, + "src": "1091:13213:1" + } + ], + "src": "0:14305:1" + }, + "legacyAST": { + "absolutePath": "/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol", + "exportedSymbols": { + "Subscription": [ + 675 + ] + }, + "id": 676, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 58, + "literals": [ + "solidity", + "^", + "0.5", + ".2" + ], + "nodeType": "PragmaDirective", + "src": "0:23:1" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol", + "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol", + "id": 59, + "nodeType": "ImportDirective", + "scope": 676, + "sourceUnit": 757, + "src": "900:64:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol", + "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", + "id": 60, + "nodeType": "ImportDirective", + "scope": 676, + "sourceUnit": 885, + "src": "965:59:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", + "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", + "id": 61, + "nodeType": "ImportDirective", + "scope": 676, + "sourceUnit": 1268, + "src": "1025:63:1", + "symbolAliases": [], + "unitAlias": "" + }, + { + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 675, + "linearizedBaseContracts": [ + 675 + ], + "name": "Subscription", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 64, + "libraryName": { + "contractScope": null, + "id": 62, + "name": "ECDSA", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 756, + "src": "1125:5:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ECDSA_$756", + "typeString": "library ECDSA" + } + }, + "nodeType": "UsingForDirective", + "src": "1119:24:1", + "typeName": { + "id": 63, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1135:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "id": 67, + "libraryName": { + "contractScope": null, + "id": 65, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 884, + "src": "1154:8:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$884", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1148:27:1", + "typeName": { + "id": 66, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1167:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 69, + "name": "author", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1212:29:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 68, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1212:15:1", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 71, + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1288:22:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 70, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1288:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 73, + "name": "requiredToAddress", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1470:32:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 72, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1470:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 75, + "name": "requiredTokenAddress", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1508:35:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 74, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1508:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 77, + "name": "requiredTokenAmount", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1549:34:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 76, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1549:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 79, + "name": "requiredPeriodSeconds", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1589:36:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1589:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 81, + "name": "requiredGasPrice", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1631:31:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 80, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1631:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 85, + "name": "nextValidTimestamp", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "1854:53:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 84, + "keyType": { + "id": 82, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1862:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1854:27:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueType": { + "id": 83, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1873:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 89, + "name": "extraNonce", + "nodeType": "VariableDeclaration", + "scope": 675, + "src": "2088:45:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 88, + "keyType": { + "id": 86, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2096:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2088:27:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 87, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2107:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "anonymous": false, + "documentation": null, + "id": 105, + "name": "ExecuteSubscription", + "nodeType": "EventDefinition", + "parameters": { + "id": 104, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 91, + "indexed": true, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2175:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 90, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2175:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 93, + "indexed": true, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2222:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 92, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2222:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 95, + "indexed": false, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2266:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 94, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2266:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 97, + "indexed": false, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2338:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 96, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2338:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 99, + "indexed": false, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2408:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 98, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2408:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 101, + "indexed": false, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2480:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 100, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2480:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 103, + "indexed": false, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 105, + "src": "2557:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2557:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2165:471:1" + }, + "src": "2140:497:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 121, + "name": "CancelSubscription", + "nodeType": "EventDefinition", + "parameters": { + "id": 120, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 107, + "indexed": true, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2677:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 106, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2677:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 109, + "indexed": true, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2724:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 108, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2724:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 111, + "indexed": false, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2768:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 110, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2768:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 113, + "indexed": false, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2840:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 112, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2840:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 115, + "indexed": false, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2910:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 114, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2910:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 117, + "indexed": false, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "2982:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 116, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2982:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 119, + "indexed": false, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 121, + "src": "3059:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 118, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3059:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2667:471:1" + }, + "src": "2643:496:1" + }, + { + "body": { + "id": 167, + "nodeType": "Block", + "src": "3368:266:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 138, + "name": "requiredToAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 73, + "src": "3378:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 139, + "name": "_toAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 123, + "src": "3396:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3378:28:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 141, + "nodeType": "ExpressionStatement", + "src": "3378:28:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 142, + "name": "requiredTokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "3416:20:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 143, + "name": "_tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "3437:13:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3416:34:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 145, + "nodeType": "ExpressionStatement", + "src": "3416:34:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 146, + "name": "requiredTokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "3460:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 147, + "name": "_tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 127, + "src": "3480:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3460:32:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 149, + "nodeType": "ExpressionStatement", + "src": "3460:32:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 150, + "name": "requiredPeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79, + "src": "3502:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 151, + "name": "_periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 129, + "src": "3524:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3502:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 153, + "nodeType": "ExpressionStatement", + "src": "3502:36:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 154, + "name": "requiredGasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 81, + "src": "3548:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 155, + "name": "_gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 131, + "src": "3565:9:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3548:26:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 157, + "nodeType": "ExpressionStatement", + "src": "3548:26:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 158, + "name": "author", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3584:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 159, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "3591:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3591:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3584:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 162, + "nodeType": "ExpressionStatement", + "src": "3584:17:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 165, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 163, + "name": "relayer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "3611:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 164, + "name": "_relayer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 135, + "src": "3619:8:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3611:16:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 166, + "nodeType": "ExpressionStatement", + "src": "3611:16:1" + } + ] + }, + "documentation": null, + "id": 168, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 136, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 123, + "name": "_toAddress", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3166:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 122, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3166:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 125, + "name": "_tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3194:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 124, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3194:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 127, + "name": "_tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3225:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 126, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3225:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 129, + "name": "_periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3255:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 128, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3255:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 131, + "name": "_gasPrice", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3287:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 130, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3287:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 133, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3314:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 132, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3314:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 135, + "name": "_relayer", + "nodeType": "VariableDeclaration", + "scope": 168, + "src": "3338:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 134, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3338:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3156:204:1" + }, + "returnParameters": { + "id": 137, + "nodeType": "ParameterList", + "parameters": [], + "src": "3368:0:1" + }, + "scope": 675, + "src": "3145:489:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 200, + "nodeType": "Block", + "src": "4037:227:1", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 177, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "4050:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 179, + "indexExpression": { + "argumentTypes": null, + "id": 178, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 170, + "src": "4069:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4050:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 182, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "4096:2:1", + "subExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4097:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + ], + "id": 180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4088:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": "uint256" + }, + "id": 183, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4088:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4050:49:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 188, + "nodeType": "IfStatement", + "src": "4047:88:1", + "trueBody": { + "id": 187, + "nodeType": "Block", + "src": "4100:35:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 185, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4119:5:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 176, + "id": 186, + "nodeType": "Return", + "src": "4112:12:1" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 189, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "4152:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4152:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 195, + "name": "gracePeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 172, + "src": "4228:18:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 191, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "4187:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 193, + "indexExpression": { + "argumentTypes": null, + "id": 192, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 170, + "src": "4206:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4187:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "4187:40:1", + "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": 196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4187:60:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4152:95:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 198, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4151:106:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 176, + "id": 199, + "nodeType": "Return", + "src": "4144:113:1" + } + ] + }, + "documentation": null, + "id": 201, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isSubscriptionActive", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 173, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 170, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 201, + "src": "3913:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 169, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3913:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 172, + "name": "gracePeriodSeconds", + "nodeType": "VariableDeclaration", + "scope": 201, + "src": "3947:26:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 171, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3947:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3903:76:1" + }, + "returnParameters": { + "id": 176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 175, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 201, + "src": "4027:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 174, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4027:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4026:6:1" + }, + "scope": 675, + "src": "3874:390:1", + "stateMutability": "view", + "superFunction": null, + "visibility": "external" + }, + { + "body": { + "id": 300, + "nodeType": "Block", + "src": "4969:999:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 221, + "name": "requiredToAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 73, + "src": "5093:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 223, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5122: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": 222, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5114:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 224, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5114:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5093:31:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 226, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 205, + "src": "5128:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 227, + "name": "requiredToAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 73, + "src": "5134:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5128:23:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5093:58:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564546f41646472657373204661696c757265", + "id": 230, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5153:27:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430", + "typeString": "literal_string \"requiredToAddress Failure\"" + }, + "value": "requiredToAddress Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430", + "typeString": "literal_string \"requiredToAddress Failure\"" + } + ], + "id": 220, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5084:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5084:98:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 232, + "nodeType": "ExpressionStatement", + "src": "5084:98:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 234, + "name": "requiredTokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "5201:20:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 236, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5233: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": 235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5225:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5225:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5201:34:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 239, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "5239:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 240, + "name": "requiredTokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "5255:20:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5239:36:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5201:74:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564546f6b656e41646472657373204661696c757265", + "id": 243, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5277:30:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c", + "typeString": "literal_string \"requiredTokenAddress Failure\"" + }, + "value": "requiredTokenAddress Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c", + "typeString": "literal_string \"requiredTokenAddress Failure\"" + } + ], + "id": 233, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5192:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5192:118:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 245, + "nodeType": "ExpressionStatement", + "src": "5192:118:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 247, + "name": "requiredTokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "5329:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 248, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5352:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5329:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 250, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 209, + "src": "5357:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 251, + "name": "requiredTokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "5372:19:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5357:34:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5329:62:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564546f6b656e416d6f756e74204661696c757265", + "id": 254, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5393:29:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785", + "typeString": "literal_string \"requiredTokenAmount Failure\"" + }, + "value": "requiredTokenAmount Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785", + "typeString": "literal_string \"requiredTokenAmount Failure\"" + } + ], + "id": 246, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5320:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5320:105:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 256, + "nodeType": "ExpressionStatement", + "src": "5320:105:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 258, + "name": "requiredPeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79, + "src": "5444:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 259, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5469:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5444:26:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 261, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 211, + "src": "5474:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 262, + "name": "requiredPeriodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79, + "src": "5491:21:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5474:38:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5444:68:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "7265717569726564506572696f645365636f6e6473204661696c757265", + "id": 265, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5514:31:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b", + "typeString": "literal_string \"requiredPeriodSeconds Failure\"" + }, + "value": "requiredPeriodSeconds Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b", + "typeString": "literal_string \"requiredPeriodSeconds Failure\"" + } + ], + "id": 257, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5435:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5435:113:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 267, + "nodeType": "ExpressionStatement", + "src": "5435:113:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 269, + "name": "requiredGasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 81, + "src": "5567:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5587:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5567:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 272, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 213, + "src": "5592:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 273, + "name": "requiredGasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 81, + "src": "5604:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5592:28:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5567:53:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "72657175697265644761735072696365204661696c757265", + "id": 276, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5622:26:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb", + "typeString": "literal_string \"requiredGasPrice Failure\"" + }, + "value": "requiredGasPrice Failure" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb", + "typeString": "literal_string \"requiredGasPrice Failure\"" + } + ], + "id": 268, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "5558:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5558:93:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 278, + "nodeType": "ExpressionStatement", + "src": "5558:93:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30783139", + "id": 283, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5731:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_25_by_1", + "typeString": "int_const 25" + }, + "value": "0x19" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_25_by_1", + "typeString": "int_const 25" + } + ], + "id": 282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5726:4:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes1_$", + "typeString": "type(bytes1)" + }, + "typeName": "byte" + }, + "id": 284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5726:10:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 286, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5759: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": 285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5754:4:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes1_$", + "typeString": "type(bytes1)" + }, + "typeName": "byte" + }, + "id": 287, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5754:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 289, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1374, + "src": "5787:4:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + ], + "id": 288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5779:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5779:13:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 291, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 203, + "src": "5810:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 292, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 205, + "src": "5832:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 293, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 207, + "src": "5852:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 294, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 209, + "src": "5882:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 295, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 211, + "src": "5911:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 296, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 213, + "src": "5942:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 280, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1338, + "src": "5692:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 281, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5692:16:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5692:268:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 279, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1345, + "src": "5669:9:1", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5669:292:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 219, + "id": 299, + "nodeType": "Return", + "src": "5662:299:1" + } + ] + }, + "documentation": null, + "id": 301, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSubscriptionHash", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 203, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4458:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 202, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4458:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 205, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4497:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 204, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4497:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 207, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4533:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4533:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 209, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4605:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 208, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4605:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 211, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4675:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 210, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4675:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 213, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4747:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4747:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 215, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4831:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4831:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4448:462:1" + }, + "returnParameters": { + "id": 219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 218, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 301, + "src": "4956:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 217, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4956:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4955:9:1" + }, + "scope": 675, + "src": "4420:1548:1", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 317, + "nodeType": "Block", + "src": "6263:84:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 314, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 305, + "src": "6330:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 310, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 303, + "src": "6280:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toEthSignedMessageHash", + "nodeType": "MemberAccess", + "referencedDeclaration": 755, + "src": "6280:39:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (bytes32)" + } + }, + "id": 312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6280:41:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "recover", + "nodeType": "MemberAccess", + "referencedDeclaration": 739, + "src": "6280:49:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6280:60:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 309, + "id": 316, + "nodeType": "Return", + "src": "6273:67:1" + } + ] + }, + "documentation": null, + "id": 318, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSubscriptionSigner", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 303, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "6069:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 302, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6069:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 305, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "6126:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 304, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6126:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6059:145:1" + }, + "returnParameters": { + "id": 309, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 308, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 318, + "src": "6250:7:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 307, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6250:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6249:9:1" + }, + "scope": 675, + "src": "6029:318:1", + "stateMutability": "pure", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 409, + "nodeType": "Block", + "src": "7098:633:1", + "statements": [ + { + "assignments": [ + 340 + ], + "declarations": [ + { + "constant": false, + "id": 340, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7108:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 339, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7108:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 350, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 342, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7168:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 343, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "7174:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 344, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "7178:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 345, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "7192:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 346, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 328, + "src": "7205:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 347, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 330, + "src": "7220:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 348, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 332, + "src": "7230:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 341, + "name": "getSubscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 301, + "src": "7135:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" + } + }, + "id": 349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7135:110:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7108:137:1" + }, + { + "assignments": [ + 352 + ], + "declarations": [ + { + "constant": false, + "id": 352, + "name": "signer", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7255:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 351, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7255:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 357, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 354, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 340, + "src": "7294:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 355, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 334, + "src": "7312:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 353, + "name": "getSubscriptionSigner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "7272:21:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7272:50:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7255:67:1" + }, + { + "assignments": [ + 359 + ], + "declarations": [ + { + "constant": false, + "id": 359, + "name": "allowance", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7332:17:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7332:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 369, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 364, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7382:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 366, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1374, + "src": "7396:4:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_Subscription_$675", + "typeString": "contract Subscription" + } + ], + "id": 365, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7388:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": "address" + }, + "id": 367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7388:13:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 361, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "7358:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 360, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "7352:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7352:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "allowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 941, + "src": "7352:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view external returns (uint256)" + } + }, + "id": 368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7352:50:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7332:70:1" + }, + { + "assignments": [ + 371 + ], + "declarations": [ + { + "constant": false, + "id": 371, + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 409, + "src": "7412:15:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7412:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 378, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 376, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7460:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 373, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 324, + "src": "7436:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 372, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "7430:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7430:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 925, + "src": "7430:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7430:35:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7412:53:1" + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 379, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 352, + "src": "7497:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 380, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7507:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7497:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 382, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 320, + "src": "7527:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "id": 383, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 322, + "src": "7535:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "7527:10:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:40:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 386, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "7553:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7553:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 388, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "7572:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 390, + "indexExpression": { + "argumentTypes": null, + "id": 389, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 340, + "src": "7591:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7572:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7553:55:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:111:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 393, + "name": "allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 359, + "src": "7624:9:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 396, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 330, + "src": "7653:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 394, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "7637:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "7637:15:1", + "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": 397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7637:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7624:38:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:165:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 400, + "name": "balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 371, + "src": "7678:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 403, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 330, + "src": "7705:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 401, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 326, + "src": "7689:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "7689:15:1", + "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": 404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7689:25:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7678:36:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7497:217:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 407, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7483:241:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 338, + "id": 408, + "nodeType": "Return", + "src": "7476:248:1" + } + ] + }, + "documentation": null, + "id": 410, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isSubscriptionReady", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 335, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6508:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6508:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 322, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6547:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 321, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6547:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 324, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6583:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 323, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6583:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 326, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6655:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6655:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 328, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6725:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6725:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 330, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6797:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 329, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6797:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 332, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6882:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 331, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6882:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 334, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "6964:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 333, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6964:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6498:544:1" + }, + "returnParameters": { + "id": 338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 337, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 410, + "src": "7088:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 336, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7088:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7087:6:1" + }, + "scope": 675, + "src": "6470:1261:1", + "stateMutability": "view", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 486, + "nodeType": "Block", + "src": "8606:802:1", + "statements": [ + { + "assignments": [ + 432 + ], + "declarations": [ + { + "constant": false, + "id": 432, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 486, + "src": "8616:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 431, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8616:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 442, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 434, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "8676:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 435, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 414, + "src": "8682:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 436, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 416, + "src": "8686:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 437, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 418, + "src": "8700:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 438, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 420, + "src": "8713:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 439, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 422, + "src": "8728:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 440, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 424, + "src": "8738:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 433, + "name": "getSubscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 301, + "src": "8643:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" + } + }, + "id": 441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8643:110:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8616:137:1" + }, + { + "assignments": [ + 444 + ], + "declarations": [ + { + "constant": false, + "id": 444, + "name": "signer", + "nodeType": "VariableDeclaration", + "scope": 486, + "src": "8763:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 443, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8763:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 449, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 446, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 432, + "src": "8802:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "argumentTypes": null, + "id": 447, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 426, + "src": "8820:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 445, + "name": "getSubscriptionSigner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 318, + "src": "8780:21:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes32,bytes memory) pure returns (address)" + } + }, + "id": 448, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8780:50:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8763:67:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 453, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 451, + "name": "signer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 444, + "src": "8887:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 452, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "8897:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "8887:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e", + "id": 454, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8903:49:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b", + "typeString": "literal_string \"Invalid Signature for subscription cancellation\"" + }, + "value": "Invalid Signature for subscription cancellation" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b", + "typeString": "literal_string \"Invalid Signature for subscription cancellation\"" + } + ], + "id": 450, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "8879:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8879:74:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 456, + "nodeType": "ExpressionStatement", + "src": "8879:74:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 458, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "9012:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 459, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "9020:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9020:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "9012:18:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "6d73672e73656e646572206973206e6f74207468652073756273637269626572", + "id": 462, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9032:34:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79", + "typeString": "literal_string \"msg.sender is not the subscriber\"" + }, + "value": "msg.sender is not the subscriber" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79", + "typeString": "literal_string \"msg.sender is not the subscriber\"" + } + ], + "id": 457, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "9004:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9004:63:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 464, + "nodeType": "ExpressionStatement", + "src": "9004:63:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 465, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "9206:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 467, + "indexExpression": { + "argumentTypes": null, + "id": 466, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 432, + "src": "9225:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9206:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 470, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "9251:2:1", + "subExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 469, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9252:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + ], + "id": 468, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9243:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": "uint256" + }, + "id": 471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9243:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9206:48:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 473, + "nodeType": "ExpressionStatement", + "src": "9206:48:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 475, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 412, + "src": "9302:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 476, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 414, + "src": "9308:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 477, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 416, + "src": "9312:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 478, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 418, + "src": "9326:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 479, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 420, + "src": "9339:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 480, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 422, + "src": "9354:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 481, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 424, + "src": "9364:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 474, + "name": "CancelSubscription", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 121, + "src": "9270:18:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" + } + }, + "id": 482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9270:109:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 483, + "nodeType": "EmitStatement", + "src": "9265:114:1" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 484, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9397:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 430, + "id": 485, + "nodeType": "Return", + "src": "9390:11:1" + } + ] + }, + "documentation": null, + "id": 487, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "cancelSubscription", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 427, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 412, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8022:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 411, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8022:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 414, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8061:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 413, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8061:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 416, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8097:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 415, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8097:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 418, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8169:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 417, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8169:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 420, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8239:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 419, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8239:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 422, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8311:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8311:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 424, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8395:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 423, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8395:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 426, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8477:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 425, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8477:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8012:543:1" + }, + "returnParameters": { + "id": 430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 429, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 487, + "src": "8588:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 428, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8588:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8587:14:1" + }, + "scope": 675, + "src": "7985:1423:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 636, + "nodeType": "Block", + "src": "10189:2468:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 509, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "10207:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10207:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 511, + "name": "relayer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "10221:7:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "10207:21:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 508, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1354, + "src": "10199:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10199:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 514, + "nodeType": "ExpressionStatement", + "src": "10199:30:1" + }, + { + "assignments": [ + 516 + ], + "declarations": [ + { + "constant": false, + "id": 516, + "name": "subscriptionHash", + "nodeType": "VariableDeclaration", + "scope": 636, + "src": "10239:24:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 515, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10239:7:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 526, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 518, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10299:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 519, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "10305:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 520, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "10309:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 521, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "10323:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 522, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "10336:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 523, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "10351:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 524, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10361:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 517, + "name": "getSubscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 301, + "src": "10266:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" + } + }, + "id": 525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10266:110:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10239:137:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 529, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10473:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 530, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "10479:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 531, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "10483:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 532, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "10497:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 533, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "10510:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 534, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "10525:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 535, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10535:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 536, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 503, + "src": "10542:9:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 528, + "name": "isSubscriptionReady", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 410, + "src": "10453:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)" + } + }, + "id": 537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10453:99:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574", + "id": 538, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10554:67:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3", + "typeString": "literal_string \"Subscription is not ready or conditions of transction are not met\"" + }, + "value": "Subscription is not ready or conditions of transction are not met" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3", + "typeString": "literal_string \"Subscription is not ready or conditions of transction are not met\"" + } + ], + "id": 527, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "10444:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10444:179:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 540, + "nodeType": "ExpressionStatement", + "src": "10444:179:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 541, + "name": "nextValidTimestamp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 85, + "src": "10713:18:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 543, + "indexExpression": { + "argumentTypes": null, + "id": 542, + "name": "subscriptionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 516, + "src": "10732:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10713:36:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 547, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "10772:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 544, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "10752:5:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10752:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 863, + "src": "10752:19:1", + "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": 548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10752:34:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10713:73:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 550, + "nodeType": "ExpressionStatement", + "src": "10713:73:1" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 551, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10905:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 552, + "name": "extraNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89, + "src": "10913:10:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 554, + "indexExpression": { + "argumentTypes": null, + "id": 553, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10924:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10913:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10905:24:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 563, + "nodeType": "IfStatement", + "src": "10902:75:1", + "trueBody": { + "id": 562, + "nodeType": "Block", + "src": "10930:47:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 556, + "name": "extraNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89, + "src": "10942:10:1", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 558, + "indexExpression": { + "argumentTypes": null, + "id": 557, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "10953:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10942:16:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 559, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "10961:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10942:24:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 561, + "nodeType": "ExpressionStatement", + "src": "10942:24:1" + } + ] + } + }, + { + "assignments": [ + 565 + ], + "declarations": [ + { + "constant": false, + "id": 565, + "name": "startingBalance", + "nodeType": "VariableDeclaration", + "scope": 636, + "src": "11062:23:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 564, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11062:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 572, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 570, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11118:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 567, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11094:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 566, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "11088:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11088:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 925, + "src": "11088:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11088:33:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11062:59:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 577, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "11164:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 578, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11169:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 579, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "11172:11:1", + "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, + "arguments": [ + { + "argumentTypes": null, + "id": 574, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11137:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 573, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "11131:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11131:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1014, + "src": "11131:32:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11131:53:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 581, + "nodeType": "ExpressionStatement", + "src": "11131:53:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 583, + "name": "startingBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 565, + "src": "11214:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 584, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "11230:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11214:27:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 586, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11213:29:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 591, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11276:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 588, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11252:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 587, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "11246:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11246:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 925, + "src": "11246:29:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11246:33:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11213:66:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79", + "id": 594, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11291:40:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7", + "typeString": "literal_string \"ERC20 Balance did not change correctly\"" + }, + "value": "ERC20 Balance did not change correctly" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7", + "typeString": "literal_string \"ERC20 Balance did not change correctly\"" + } + ], + "id": 582, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "11194:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11194:147:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 596, + "nodeType": "ExpressionStatement", + "src": "11194:147:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 598, + "name": "checkSuccess", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 652, + "src": "11371:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", + "typeString": "function () pure returns (bool)" + } + }, + "id": 599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11371:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564", + "id": 600, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11397:55:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28", + "typeString": "literal_string \"Subscription::executeSubscription TransferFrom failed\"" + }, + "value": "Subscription::executeSubscription TransferFrom failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28", + "typeString": "literal_string \"Subscription::executeSubscription TransferFrom failed\"" + } + ], + "id": 597, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "11352:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 601, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11352:112:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 602, + "nodeType": "ExpressionStatement", + "src": "11352:112:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 604, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "11514:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 605, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 491, + "src": "11520:2:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 606, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "11524:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 607, + "name": "tokenAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 495, + "src": "11538:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 608, + "name": "periodSeconds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 497, + "src": "11551:13:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 609, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "11566:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 610, + "name": "nonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "11576:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 603, + "name": "ExecuteSubscription", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 105, + "src": "11481:19:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" + } + }, + "id": 611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11481:110:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 612, + "nodeType": "EmitStatement", + "src": "11476:115:1" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 613, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "11811:8:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 614, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11822:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "11811:12:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 633, + "nodeType": "IfStatement", + "src": "11807:822:1", + "trueBody": { + "id": 632, + "nodeType": "Block", + "src": "11825:804:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 620, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 489, + "src": "12437:4:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 621, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "12443:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "12443:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 623, + "name": "gasPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 499, + "src": "12455:8:1", + "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" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 617, + "name": "tokenAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 493, + "src": "12410:12:1", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 616, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1267, + "src": "12404:5:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12404:19:1", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$1267", + "typeString": "contract ERC20" + } + }, + "id": 619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1014, + "src": "12404:32:1", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12404:60:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 625, + "nodeType": "ExpressionStatement", + "src": "12404:60:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 627, + "name": "checkSuccess", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 652, + "src": "12503:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", + "typeString": "function () pure returns (bool)" + } + }, + "id": 628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12503:14:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74", + "id": 629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12535:69:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7", + "typeString": "literal_string \"Subscription::executeSubscription Failed to pay gas as from account\"" + }, + "value": "Subscription::executeSubscription Failed to pay gas as from account" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7", + "typeString": "literal_string \"Subscription::executeSubscription Failed to pay gas as from account\"" + } + ], + "id": 626, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1355, + "src": "12478:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12478:140:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 631, + "nodeType": "ExpressionStatement", + "src": "12478:140:1" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "74727565", + "id": 634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12646:4:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 507, + "id": 635, + "nodeType": "Return", + "src": "12639:11:1" + } + ] + }, + "documentation": null, + "id": 637, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "executeSubscription", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 489, + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9604:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 488, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9604:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 491, + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9643:10:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 490, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9643:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 493, + "name": "tokenAddress", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9679:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 492, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9679:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 495, + "name": "tokenAmount", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9751:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 494, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9751:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 497, + "name": "periodSeconds", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9821:21:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 496, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9821:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 499, + "name": "gasPrice", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9893:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 498, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9893:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 501, + "name": "nonce", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "9977:13:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 500, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9977:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 503, + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "10060:22:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 502, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10060:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9594:544:1" + }, + "returnParameters": { + "id": 507, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 506, + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 637, + "src": "10171:12:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 505, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10171:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10170:14:1" + }, + "scope": 675, + "src": "9566:3091:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 651, + "nodeType": "Block", + "src": "13157:770:1", + "statements": [ + { + "assignments": [ + 643 + ], + "declarations": [ + { + "constant": false, + "id": 643, + "name": "returnValue", + "nodeType": "VariableDeclaration", + "scope": 651, + "src": "13167:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 642, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13167:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 645, + "initialValue": { + "argumentTypes": null, + "hexValue": "30", + "id": 644, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13189:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13167:23:1" + }, + { + "externalReferences": [ + { + "returnValue": { + "declaration": 643, + "isOffset": false, + "isSlot": false, + "src": "13472:11:1", + "valueSize": 1 + } + }, + { + "returnValue": { + "declaration": 643, + "isOffset": false, + "isSlot": false, + "src": "13749:11:1", + "valueSize": 1 + } + } + ], + "id": 646, + "nodeType": "InlineAssembly", + "operations": "{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}", + "src": "13268:635:1" + }, + { + "expression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 647, + "name": "returnValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 643, + "src": "13904:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 648, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13919:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13904:16:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 641, + "id": 650, + "nodeType": "Return", + "src": "13897:23:1" + } + ] + }, + "documentation": "Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.", + "id": 652, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "checkSuccess", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 638, + "nodeType": "ParameterList", + "parameters": [], + "src": "13093:7:1" + }, + "returnParameters": { + "id": 641, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 640, + "name": "", + "nodeType": "VariableDeclaration", + "scope": 652, + "src": "13147:4:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 639, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13147:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "13146:6:1" + }, + "scope": 675, + "src": "13072:855:1", + "stateMutability": "pure", + "superFunction": null, + "visibility": "private" + }, + { + "body": { + "id": 666, + "nodeType": "Block", + "src": "14101:70:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "id": 659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 656, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1351, + "src": "14117:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 657, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "14117:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 658, + "name": "author", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "14129:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "14117:18:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 655, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1354, + 1355 + ], + "referencedDeclaration": 1354, + "src": "14109:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14109:27:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 661, + "nodeType": "ExpressionStatement", + "src": "14109:27:1" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 663, + "name": "author", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "14157:6:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 662, + "name": "selfdestruct", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1359, + "src": "14144:12:1", + "typeDescriptions": { + "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$", + "typeString": "function (address payable)" + } + }, + "id": 664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14144:20:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 665, + "nodeType": "ExpressionStatement", + "src": "14144:20:1" + } + ] + }, + "documentation": null, + "id": 667, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "endContract", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 653, + "nodeType": "ParameterList", + "parameters": [], + "src": "14077:2:1" + }, + "returnParameters": { + "id": 654, + "nodeType": "ParameterList", + "parameters": [], + "src": "14101:0:1" + }, + "scope": 675, + "src": "14057:114:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "external" + }, + { + "body": { + "id": 673, + "nodeType": "Block", + "src": "14277:25:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 670, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1356, + 1357 + ], + "referencedDeclaration": 1356, + "src": "14286:6:1", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14286:9:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 672, + "nodeType": "ExpressionStatement", + "src": "14286:9:1" + } + ] + }, + "documentation": null, + "id": 674, + "implemented": true, + "kind": "fallback", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 668, + "nodeType": "ParameterList", + "parameters": [], + "src": "14257:2:1" + }, + "returnParameters": { + "id": 669, + "nodeType": "ParameterList", + "parameters": [], + "src": "14277:0:1" + }, + "scope": 675, + "src": "14248:54:1", + "stateMutability": "payable", + "superFunction": null, + "visibility": "external" + } + ], + "scope": 676, + "src": "1091:13213:1" + } + ], + "src": "0:14305:1" + }, + "compiler": { + "name": "solc", + "version": "0.5.2+commit.1df8f40c.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.0.6", + "updatedAt": "2019-05-12T15:53:10.470Z", + "devdoc": { + "methods": {} + }, + "userdoc": { + "methods": {} + } +} diff --git a/app/grants/admin.py b/app/grants/admin.py index e0869d868a7..ea6bf1cad0f 100644 --- a/app/grants/admin.py +++ b/app/grants/admin.py @@ -44,7 +44,7 @@ class GrantAdmin(GeneralAdmin): 'title', 'description', 'reference_url', 'admin_address', 'active', 'amount_goal', 'amount_received', 'monthly_amount_subscribed', 'deploy_tx_id', 'cancel_tx_id', 'admin_profile', 'token_symbol', - 'token_address', 'contract_address', 'network', 'required_gas_price', 'logo_svg_asset', + 'token_address', 'contract_address', 'contract_version', 'network', 'required_gas_price', 'logo_svg_asset', 'logo_asset', 'created_on', 'modified_on', 'team_member_list', 'subscriptions_links', 'contributions_links', 'logo', 'logo_svg', 'image_css', 'link', 'clr_matching', 'hidden' diff --git a/app/grants/convert_abi.py b/app/grants/convert_abi.py new file mode 100644 index 00000000000..04aa2a08e63 --- /dev/null +++ b/app/grants/convert_abi.py @@ -0,0 +1,9 @@ +import json +from pprint import pprint + +with open('abi_v1.json') as json_file: + abi = json.load(json_file) + print(abi['abi']) + +with open('abi_v1.py', 'w') as python_file: + pprint(abi['abi'], stream=python_file) diff --git a/app/grants/models.py b/app/grants/models.py index 1c9a1f5b2fc..c65bbdcc69a 100644 --- a/app/grants/models.py +++ b/app/grants/models.py @@ -220,8 +220,13 @@ def updateActiveSubscriptions(self): @property def abi(self): """Return grants abi.""" - from grants.abi import abi_v0 - return abi_v0 + if self.contract_version == 0: + from grants.abi import abi_v0 + return abi_v0 + elif self.contract_version == 1: + from grants.abi import abi_v1 + return abi_v1 + @property def url(self): diff --git a/app/grants/templates/grants/cancel.html b/app/grants/templates/grants/cancel.html index e7c81e25320..a893de1a793 100644 --- a/app/grants/templates/grants/cancel.html +++ b/app/grants/templates/grants/cancel.html @@ -111,7 +111,8 @@
{% trans "Gas Settings" %}
{% include 'grants/shared/shared_scripts.html' %} - + + diff --git a/app/grants/templates/grants/detail/index.html b/app/grants/templates/grants/detail/index.html index ed0c5d38d6f..12496f5e6e1 100644 --- a/app/grants/templates/grants/detail/index.html +++ b/app/grants/templates/grants/detail/index.html @@ -56,7 +56,7 @@
- + {% include 'shared/current_profile.html' %} {% include 'shared/bottom_notification.html' %} {% include 'shared/analytics.html' %} @@ -68,7 +68,8 @@ - + + diff --git a/app/grants/templates/grants/fund.html b/app/grants/templates/grants/fund.html index cbc74ced013..c53df29eeb3 100644 --- a/app/grants/templates/grants/fund.html +++ b/app/grants/templates/grants/fund.html @@ -128,6 +128,7 @@

{% trans "Fund Grant" %}

+ {% if grant.contract_version == 1 %}
@@ -166,6 +167,7 @@

{% trans "Support Gitcoin" %}

+ {% endif %}
@@ -250,6 +252,8 @@
{% trans "Gas Settings" %}
+ + @@ -296,7 +300,8 @@
Thanks for Contributing!
{% include 'grants/shared/shared_scripts.html' %} - + + diff --git a/app/grants/templates/grants/new.html b/app/grants/templates/grants/new.html index 68392293b41..3e1e7453cdd 100644 --- a/app/grants/templates/grants/new.html +++ b/app/grants/templates/grants/new.html @@ -130,10 +130,11 @@
{% trans "Gas Settings" %}
- + +
@@ -158,7 +159,8 @@
{% trans "Gas Settings" %}
- + + diff --git a/app/grants/templates/grants/newv0.html b/app/grants/templates/grants/newv0.html new file mode 100644 index 00000000000..fafcf38f919 --- /dev/null +++ b/app/grants/templates/grants/newv0.html @@ -0,0 +1,169 @@ +{% comment %} + Copyright (C) 2018 Gitcoin Core + + 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 . +{% endcomment %} +{% load static i18n %} + + + + {% include 'shared/head.html' with slim=1 %} + {% include 'shared/cards.html' %} + + + + + {% include 'shared/tag_manager_2.html' %} +
+ {% include 'shared/top_nav.html' with class='d-md-flex' %} + {% include 'grants/nav.html' %} +
+
+ {% include 'shared/no_metamask_error.html' %} + {% include 'shared/zero_balance_error.html' %} + {% include 'shared/unlock_metamask.html' %} + {% include 'shared/connect_metamask.html' %} +
+
+
+ + {% include 'grants/shared/alpha.html' %} + {% include 'grants/shared/waiting_state.html' %} + +
+
+
+ +
+
+ +

{% trans "Create a Grant" %}

+

+ {% trans "We're excited to learn about your project." %} +
+ {% trans "Gitcoin Grants can help you accelerate your journey to funding." %} +
+ {% trans "Complete the form below to get started." %} +

+
+
+
+ {% csrf_token %} +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+
+ + +
+
+ +
+ +
+
+
+
+ +
+ + +
+ + +
+ +
+ + {% trans "Drag & Drop or Browse" %} + +
+
+ +
+
{% trans "Gas Settings" %}
+
+ {% include 'shared/wallet_estimate.html' %} +
+
+ + + +
+ + + + + + + + + + +
+
+
+
+
+ + {% include 'shared/current_profile.html' %} + {% include 'shared/bottom_notification.html' %} + {% include 'shared/analytics.html' %} + {% include 'shared/footer_scripts.html' %} + {% include 'shared/footer.html' %} + {% include 'grants/shared/shared_scripts.html' %} + + + + + + + + + + + + + + + + + diff --git a/app/grants/urls.py b/app/grants/urls.py index 0b08c8886ae..eec6b0036a0 100644 --- a/app/grants/urls.py +++ b/app/grants/urls.py @@ -20,8 +20,8 @@ from django.urls import path, re_path from grants.views import ( - grant_details, grant_fund, grant_new, grants, leaderboard, milestones, new_matching_partner, profile, quickstart, - subscription_cancel, + grant_details, grant_fund, grant_new, grant_new_v0, grants, leaderboard, milestones, new_matching_partner, profile, + quickstart, subscription_cancel, ) app_name = 'grants' @@ -30,6 +30,7 @@ path('/', grant_details, name='details'), path('//', grant_details, name='details2'), re_path(r'^new', grant_new, name='new'), + re_path(r'^old', grant_new_v0, name='old'), path('//milestones', milestones, name='milestones'), path('//fund', grant_fund, name='fund'), path( diff --git a/app/grants/views.py b/app/grants/views.py index 6697b5a0b2f..33570660e57 100644 --- a/app/grants/views.py +++ b/app/grants/views.py @@ -320,10 +320,87 @@ def grant_new(request): 'eth_usd_conv_rate': eth_usd_conv_rate(), 'conf_time_spread': conf_time_spread(), 'gas_advisories': gas_advisories(), + 'trusted_relayer': settings.GRANTS_OWNER_ACCOUNT } - return TemplateResponse(request, 'grants/new.html', params) +@login_required +def grant_new_v0(request): + """Create a v0 version of a grant contract.""" + if not request.user.has_perm('grants.add_grant'): + return redirect('https://gitcoin.typeform.com/to/C2IocD') + profile = get_profile(request) + + if request.method == 'POST': + if 'title' in request.POST: + logo = request.FILES.get('input_image', None) + receipt = json.loads(request.POST.get('receipt', '{}')) + team_members = request.POST.getlist('team_members[]') + + grant_kwargs = { + 'title': request.POST.get('title', ''), + 'description': request.POST.get('description', ''), + 'reference_url': request.POST.get('reference_url', ''), + 'admin_address': request.POST.get('admin_address', ''), + 'contract_owner_address': request.POST.get('contract_owner_address', ''), + 'token_address': request.POST.get('token_address', ''), + 'token_symbol': request.POST.get('token_symbol', ''), + 'amount_goal': request.POST.get('amount_goal', 1), + 'contract_version': request.POST.get('contract_version', ''), + 'deploy_tx_id': request.POST.get('transaction_hash', ''), + 'network': request.POST.get('network', 'mainnet'), + 'metadata': receipt, + 'admin_profile': profile, + 'logo': logo, + } + grant = Grant.objects.create(**grant_kwargs) + team_members.append(profile.id) + grant.team_members.add(*list(filter(lambda member_id: member_id > 0, map(int, team_members)))) + return JsonResponse({ + 'success': True, + }) + + if 'contract_address' in request.POST: + tx_hash = request.POST.get('transaction_hash', '') + if not tx_hash: + return JsonResponse({ + 'success': False, + 'info': 'no tx hash', + 'url': None, + }) + + grant = Grant.objects.filter(deploy_tx_id=tx_hash).first() + grant.contract_address = request.POST.get('contract_address', '') + print(tx_hash, grant.contract_address) + grant.save() + record_grant_activity_helper('new_grant', grant, profile) + new_grant(grant, profile) + return JsonResponse({ + 'success': True, + 'url': reverse('grants:details', args=(grant.pk, grant.slug)) + }) + + + params = { + 'active': 'new_grant', + 'title': _('New Grant'), + 'card_desc': _('Provide sustainable funding for Open Source with Gitcoin Grants'), + 'profile': profile, + 'grant': {}, + 'keywords': get_keywords(), + 'recommend_gas_price': recommend_min_gas_price_to_confirm_in_time(4), + 'recommend_gas_price_slow': recommend_min_gas_price_to_confirm_in_time(120), + 'recommend_gas_price_avg': recommend_min_gas_price_to_confirm_in_time(15), + 'recommend_gas_price_fast': recommend_min_gas_price_to_confirm_in_time(1), + 'eth_usd_conv_rate': eth_usd_conv_rate(), + 'conf_time_spread': conf_time_spread(), + 'gas_advisories': gas_advisories(), + 'trusted_relayer': settings.GRANTS_OWNER_ACCOUNT + } + + return TemplateResponse(request, 'grants/newv0.html', params) + + @login_required def milestones(request, grant_id, grant_slug): @@ -478,6 +555,8 @@ def grant_fund(request, grant_id, grant_slug): 'url': reverse('grants:details', args=(grant.pk, grant.slug)) }) + splitter_contract_address = settings.SPLITTER_CONTRACT_ADDRESS + params = { 'active': 'fund_grant', 'title': _('Fund Grant'), @@ -493,6 +572,8 @@ def grant_fund(request, grant_id, grant_slug): 'eth_usd_conv_rate': eth_usd_conv_rate(), 'conf_time_spread': conf_time_spread(), 'gas_advisories': gas_advisories(), + 'splitter_contract_address': settings.SPLITTER_CONTRACT_ADDRESS, + 'gitcoin_donation_address': settings.GITCOIN_DONATION_ADDRESS } return TemplateResponse(request, 'grants/fund.html', params) @@ -769,7 +850,7 @@ def is_verified(tx_details, tx_hash, tx_amount, network): match_pledge.save() return get_json_response( - """Thank you for volunteering to match on Gitcoin Grants. + """Thank you for volunteering to match on Gitcoin Grants. You are supporting open source, and we thank you.""", 201 ) From f2c84be227909554ee84f6cf4c1f792819620845 Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 19:05:41 +0900 Subject: [PATCH 05/13] remove duplicate splitterAddress definition --- app/assets/v2/js/grants/shared.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app/assets/v2/js/grants/shared.js b/app/assets/v2/js/grants/shared.js index b14415f5010..163e6b82613 100644 --- a/app/assets/v2/js/grants/shared.js +++ b/app/assets/v2/js/grants/shared.js @@ -1,7 +1,6 @@ // outside of document.ready to be in global scope var compiledSubscription; var compiledSplitter; -var splitterAddress = '0xe2fd6dfe7f371e884e782d46f043552421b3a9d9'; var contractVersion; // Waiting State screen From 3408a0d2f076120a9b3ce9d63af5a780d21f23c0 Mon Sep 17 00:00:00 2001 From: Aditya Anand Date: Wed, 22 May 2019 16:24:06 +0530 Subject: [PATCH 06/13] fix breaking UI --- app/assets/v2/css/grants/fund.css | 15 +++++++++++++++ app/grants/templates/grants/fund.html | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/assets/v2/css/grants/fund.css b/app/assets/v2/css/grants/fund.css index 18e63a24319..37ff94515df 100644 --- a/app/assets/v2/css/grants/fund.css +++ b/app/assets/v2/css/grants/fund.css @@ -142,6 +142,21 @@ bottom: -1.2rem; } +@media (min-width:1140px) and (max-width: 1600px) { + + #gitcoin-grant-section .fee-slider, + #gitcoin-grant-section .fee-slider-summary { + width: 100%; + max-width: 100%; + flex: 100%; + text-align: center !important; + } + + #gitcoin-grant-section .fee-slider-summary { + margin-bottom: 1rem !important; + } +} + @media (max-width: 767.98px) { .banner-img { diff --git a/app/grants/templates/grants/fund.html b/app/grants/templates/grants/fund.html index c53df29eeb3..855c1ccfbd2 100644 --- a/app/grants/templates/grants/fund.html +++ b/app/grants/templates/grants/fund.html @@ -139,7 +139,7 @@

{% trans "Support Gitcoin" %}

-
+
{% include './heart.html' %}
5%
@@ -147,7 +147,7 @@

{% trans "Support Gitcoin" %}15%

-
+

custom %

From c5d95cae3c03fea6123dccceb1def35c973346cf Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 20:27:08 +0900 Subject: [PATCH 07/13] fix typo in selector --- app/assets/v2/js/grants/fund.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 916b4cceef0..728f02fed48 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -10,7 +10,7 @@ let gitcoinDonationAddress; $(document).ready(function() { - gitcoinDonationAddress = $('gitcoin_donation_address').val(); + gitcoinDonationAddress = $('#gitcoin_donation_address').val(); splitterAddress = $('#splitter_contract_address').val(); $('.js-select2').each(function() { From d35e9206aa6dfbbcf96c7cdb2c273de1b1c39395 Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 20:38:13 +0900 Subject: [PATCH 08/13] allow 0% fee --- app/assets/v2/js/grants/fund.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 728f02fed48..33419a292fd 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -454,7 +454,7 @@ const splitGrantAmount = () => { if (total_amount != 0) { - if (!percent || percent == 0) { + if (!percent) { $('#summary-gitcoin-grant').hide(); grant_amount = Number($('input#amount').val()); } else { From 451d417c100454a2bd0eedc2e31cd7433b96e769 Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 22:13:28 +0900 Subject: [PATCH 09/13] add changeOwnership to v1 contract --- .../grants/compiledSubscriptionContract1.js | 7343 +++++++++------- app/grants/abi_v1.json | 7345 ++++++++++------- 2 files changed, 8283 insertions(+), 6405 deletions(-) diff --git a/app/assets/v2/js/grants/compiledSubscriptionContract1.js b/app/assets/v2/js/grants/compiledSubscriptionContract1.js index 5f3b1ef84a2..6304d6f2823 100644 --- a/app/assets/v2/js/grants/compiledSubscriptionContract1.js +++ b/app/assets/v2/js/grants/compiledSubscriptionContract1.js @@ -87,17 +87,26 @@ let compiledSubscription1 = { }, { 'constant': true, - 'inputs': [ + 'inputs': [], + 'name': 'owner', + 'outputs': [ { 'name': '', 'type': 'address' } ], - 'name': 'extraNonce', + 'payable': false, + 'stateMutability': 'view', + 'type': 'function' + }, + { + 'constant': true, + 'inputs': [], + 'name': 'contractVersion', 'outputs': [ { 'name': '', - 'type': 'uint256' + 'type': 'uint8' } ], 'payable': false, @@ -106,14 +115,19 @@ let compiledSubscription1 = { }, { 'constant': true, - 'inputs': [], - 'name': 'author', - 'outputs': [ + 'inputs': [ { 'name': '', 'type': 'address' } ], + 'name': 'extraNonce', + 'outputs': [ + { + 'name': '', + 'type': 'uint256' + } + ], 'payable': false, 'stateMutability': 'view', 'type': 'function' @@ -261,6 +275,37 @@ let compiledSubscription1 = { 'name': 'CancelSubscription', 'type': 'event' }, + { + 'anonymous': false, + 'inputs': [ + { + 'indexed': false, + 'name': 'oldOwner', + 'type': 'address' + }, + { + 'indexed': false, + 'name': 'newOwner', + 'type': 'address' + } + ], + 'name': 'ownershipChanged', + 'type': 'event' + }, + { + 'constant': false, + 'inputs': [ + { + 'name': '_newOwner', + 'type': 'address' + } + ], + 'name': 'changeOwnership', + 'outputs': [], + 'payable': false, + 'stateMutability': 'nonpayable', + 'type': 'function' + }, { 'constant': true, 'inputs': [ @@ -501,21 +546,21 @@ let compiledSubscription1 = { 'type': 'function' } ], - 'metadata': '{\'compiler\':{\'version\':\'0.5.2+commit.1df8f40c\'},\'language\':\'Solidity\',\'output\':{\'abi\':[{\'constant\':true,\'inputs\':[],\'name\':\'requiredGasPrice\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'subscriptionHash\',\'type\':\'bytes32\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'getSubscriptionSigner\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'pure\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredTokenAmount\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredToAddress\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredPeriodSeconds\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredTokenAddress\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'cancelSubscription\',\'outputs\':[{\'name\':\'success\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'relayer\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'\',\'type\':\'address\'}],\'name\':\'extraNonce\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'author\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'subscriptionHash\',\'type\':\'bytes32\'},{\'name\':\'gracePeriodSeconds\',\'type\':\'uint256\'}],\'name\':\'isSubscriptionActive\',\'outputs\':[{\'name\':\'\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[],\'name\':\'endContract\',\'outputs\':[],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'getSubscriptionHash\',\'outputs\':[{\'name\':\'\',\'type\':\'bytes32\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'executeSubscription\',\'outputs\':[{\'name\':\'success\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'isSubscriptionReady\',\'outputs\':[{\'name\':\'\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'\',\'type\':\'bytes32\'}],\'name\':\'nextValidTimestamp\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'inputs\':[{\'name\':\'_toAddress\',\'type\':\'address\'},{\'name\':\'_tokenAddress\',\'type\':\'address\'},{\'name\':\'_tokenAmount\',\'type\':\'uint256\'},{\'name\':\'_periodSeconds\',\'type\':\'uint256\'},{\'name\':\'_gasPrice\',\'type\':\'uint256\'},{\'name\':\'_version\',\'type\':\'uint8\'},{\'name\':\'_relayer\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'constructor\'},{\'payable\':true,\'stateMutability\':\'payable\',\'type\':\'fallback\'},{\'anonymous\':false,\'inputs\':[{\'indexed\':true,\'name\':\'from\',\'type\':\'address\'},{\'indexed\':true,\'name\':\'to\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAddress\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'ExecuteSubscription\',\'type\':\'event\'},{\'anonymous\':false,\'inputs\':[{\'indexed\':true,\'name\':\'from\',\'type\':\'address\'},{\'indexed\':true,\'name\':\'to\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAddress\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'CancelSubscription\',\'type\':\'event\'}],\'devdoc\':{\'methods\':{}},\'userdoc\':{\'methods\':{}}},\'settings\':{\'compilationTarget\':{\'/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\':\'Subscription\'},\'evmVersion\':\'byzantium\',\'libraries\':{},\'optimizer\':{\'enabled\':false,\'runs\':200},\'remappings\':[]},\'sources\':{\'/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\':{\'keccak256\':\'0xd23b843d2a5cbd6e762c03fc55c62e331f306f37458e14cf791f4d10fc8f4c4f\',\'urls\':[\'bzzr://33f93fb60362d588a089d221a20097a97112f7060364f97151667be7e2007bc7\']},\'openzeppelin-solidity/contracts/cryptography/ECDSA.sol\':{\'keccak256\':\'0x0cbeb7f69b70ff62eb5536caebbc8701b6490ae7ee2e252d77891cf6eba11326\',\'urls\':[\'bzzr://58a443499466ee0706d22af81b43ab6779b519255fbc66276546386ec00a30d7\']},\'openzeppelin-solidity/contracts/math/SafeMath.sol\':{\'keccak256\':\'0xc2a200a877c4a9b2475c246c54ffecc69ffde3e11af83319c63c2dc5458bac80\',\'urls\':[\'bzzr://c8876e2c39b60f155d748d71d715c8f3903fae5a405ac599adcb6ad2f9a583f9\']},\'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\':{\'keccak256\':\'0x3dceb7e4aa237a56111c13f77d7efadeceda7271d62bfac94ac79afab7c1f411\',\'urls\':[\'bzzr://2f34152a5bec385352002c31bc89f5e9935f628f1923ccea45c2281e0084a4db\']},\'openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\':{\'keccak256\':\'0x59e7df16169a498cb8837963b2f5461d88e63bd1eb6c7d58b814d76b84ccbe61\',\'urls\':[\'bzzr://e572c9c4e02e37349702451bf3b5dcbbc86a19da5a51695b5b3e1bfe1e7825dc\']}},\'version\':1}', - 'bytecode': '0x608060405234801561001057600080fd5b5060405160e080612345833981018060405260e081101561003057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846004819055508360058190555082600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505061219a806101ab6000396000f3fe608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029', - 'deployedBytecode': '0x608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029', - 'sourceMap': '1091:13213:1:-;;;3145:489;8:9:-1;5:2;;;30:1;27;20:12;5:2;3145:489:1;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3145:489:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3396:10;3378:17;;:28;;;;;;;;;;;;;;;;;;3437:13;3416:20;;:34;;;;;;;;;;;;;;;;;;3480:12;3460:19;:32;;;;3524:14;3502:21;:36;;;;3565:9;3548:16;:26;;;;3591:10;3584:6;;:17;;;;;;;;;;;;;;;;;;3619:8;3611:7;;:16;;;;;;;;;;;;;;;;;;3145:489;;;;;;;1091:13213;;;;;;', - 'deployedSourceMap': '1091:13213:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14286:9;;;1631:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1631:31:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6029:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6029:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6029:318:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6029:318:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6029:318:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6029:318:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6029:318:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1549:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1549:34:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1470:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1470:32:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1589:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1589:36:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1508:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1508:35:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7985:1423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7985:1423:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7985:1423:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7985:1423:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7985:1423:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1288:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1288:22:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2088:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2088:45:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2088:45:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1212:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1212:29:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3874:390;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3874:390:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3874:390:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14057:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14057:114:1;;;:::i;:::-;;4420:1548;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4420:1548:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4420:1548:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9566:3091;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9566:3091:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9566:3091:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9566:3091:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9566:3091:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6470:1261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6470:1261:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6470:1261:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6470:1261:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6470:1261:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1854:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1854:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1854:53:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1631:31;;;;:::o;6029:318::-;6250:7;6280:60;6330:9;6280:41;:16;:39;:41::i;:::-;:49;;:60;;;;:::i;:::-;6273:67;;6029:318;;;;:::o;1549:34::-;;;;:::o;1470:32::-;;;;;;;;;;;;;:::o;1589:36::-;;;;:::o;1508:35::-;;;;;;;;;;;;;:::o;7985:1423::-;8588:12;8616:24;8643:110;8676:4;8682:2;8686:12;8700:11;8713:13;8728:8;8738:5;8643:19;:110::i;:::-;8616:137;;8763:14;8780:50;8802:16;8820:9;8780:21;:50::i;:::-;8763:67;;8897:4;8887:14;;:6;:14;;;8879:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9020:10;9012:18;;:4;:18;;;9004:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9251:2;9206:18;:36;9225:16;9206:36;;;;;;;;;;;:48;;;;9308:2;9270:109;;9302:4;9270:109;;;9312:12;9326:11;9339:13;9354:8;9364:5;9270:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9397:4;9390:11;;;;7985:1423;;;;;;;;;;:::o;1288:22::-;;;;;;;;;;;;;:::o;2088:45::-;;;;;;;;;;;;;;;;;:::o;1212:29::-;;;;;;;;;;;;;:::o;3874:390::-;4027:4;4096:2;4050:18;:36;4069:16;4050:36;;;;;;;;;;;;:49;4047:88;;;4119:5;4112:12;;;;4047:88;4187:60;4228:18;4187;:36;4206:16;4187:36;;;;;;;;;;;;:40;;:60;;;;:::i;:::-;4152:15;:95;;4144:113;;3874:390;;;;;:::o;14057:114::-;14129:6;;;;;;;;;;;14117:18;;:10;:18;;;14109:27;;;;;;;;14157:6;;;;;;;;;;;14144:20;;;4420:1548;4956:7;5122:1;5093:31;;:17;;;;;;;;;;;:31;;;:58;;;;5134:17;;;;;;;;;;;5128:23;;:2;:23;;;5093:58;5084:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5233:1;5201:34;;:20;;;;;;;;;;;:34;;;:74;;;;5255:20;;;;;;;;;;;5239:36;;:12;:36;;;5201:74;5192:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5352:1;5329:19;;:24;:62;;;;5372:19;;5357:11;:34;5329:62;5320:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5469:1;5444:21;;:26;:68;;;;5491:21;;5474:13;:38;5444:68;5435:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:1;5567:16;;:21;:53;;;;5604:16;;5592:8;:28;5567:53;5558:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5731:4;5726:10;;5759:1;5754:7;;5787:4;5810;5832:2;5852:12;5882:11;5911:13;5942:8;5692:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5692:268:1;;;5669:292;;;;;;5662:299;;4420:1548;;;;;;;;;:::o;9566:3091::-;10171:12;10221:7;;;;;;;;;;;10207:21;;:10;:21;;;10199:30;;;;;;;;10239:24;10266:110;10299:4;10305:2;10309:12;10323:11;10336:13;10351:8;10361:5;10266:19;:110::i;:::-;10239:137;;10453:99;10473:4;10479:2;10483:12;10497:11;10510:13;10525:8;10535:5;10542:9;10453:19;:99::i;:::-;10444:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:34;10772:13;10752:15;:19;;:34;;;;:::i;:::-;10713:18;:36;10732:16;10713:36;;;;;;;;;;;:73;;;;10913:10;:16;10924:4;10913:16;;;;;;;;;;;;;;;;10905:5;:24;10902:75;;;10961:5;10942:10;:16;10953:4;10942:16;;;;;;;;;;;;;;;:24;;;;10902:75;11062:23;11094:12;11088:29;;;11118:2;11088:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11088:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11088:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11088:33:1;;;;;;;;;;;;;;;;11062:59;;11137:12;11131:32;;;11164:4;11169:2;11172:11;11131:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11131:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11131:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11131:53:1;;;;;;;;;;;;;;;;;11252:12;11246:29;;;11276:2;11246:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11246:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11246:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11246:33:1;;;;;;;;;;;;;;;;11230:11;11214:15;:27;11213:66;11194:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11371:14;:12;:14::i;:::-;11352:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11520:2;11481:110;;11514:4;11481:110;;;11524:12;11538:11;11551:13;11566:8;11576:5;11481:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:1;11811:8;:12;11807:822;;;12410:12;12404:32;;;12437:4;12443:10;12455:8;12404:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12404:60:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12404:60:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12404:60:1;;;;;;;;;;;;;;;;;12503:14;:12;:14::i;:::-;12478:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11807:822;12646:4;12639:11;;;;9566:3091;;;;;;;;;;:::o;6470:1261::-;7088:4;7108:24;7135:110;7168:4;7174:2;7178:12;7192:11;7205:13;7220:8;7230:5;7135:19;:110::i;:::-;7108:137;;7255:14;7272:50;7294:16;7312:9;7272:21;:50::i;:::-;7255:67;;7332:17;7358:12;7352:29;;;7382:4;7396;7352:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7352:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7352:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7352:50:1;;;;;;;;;;;;;;;;7332:70;;7412:15;7436:12;7430:29;;;7460:4;7430:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7430:35:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7430:35:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7430:35:1;;;;;;;;;;;;;;;;7412:53;;7507:4;7497:14;;:6;:14;;;:40;;;;;7535:2;7527:10;;:4;:10;;;;7497:40;:111;;;;;7572:18;:36;7591:16;7572:36;;;;;;;;;;;;7553:15;:55;;7497:111;:165;;;;;7637:25;7653:8;7637:11;:15;;:25;;;;:::i;:::-;7624:9;:38;;7497:165;:217;;;;;7689:25;7705:8;7689:11;:15;;:25;;;;:::i;:::-;7678:7;:36;;7497:217;7476:248;;;;;;6470:1261;;;;;;;;;;:::o;1854:53::-;;;;;;;;;;;;;;;;;:::o;2650:265:2:-;2719:7;2902:4;2849:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2849:58:2;;;2839:69;;;;;;2832:76;;2650:265;;;:::o;609:1891::-;687:7;768:2;748:9;:16;:22;;744:72;;;802:1;786:19;;;;744:72;882:9;901;920:7;1166:4;1155:9;1151:20;1145:27;1140:32;;1211:4;1200:9;1196:20;1190:27;1185:32;;1264:4;1253:9;1249:20;1243:27;1240:1;1235:36;1230:41;;2182:66;2177:1;2169:10;;;:79;2165:127;;;2279:1;2264:17;;;;;;;2165:127;2311:2;2306:1;:7;;;;:18;;;;;2322:2;2317:1;:7;;;;2306:18;2302:66;;;2355:1;2340:17;;;;;;;2302:66;2469:24;2479:4;2485:1;2488;2491;2469:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2469:24:2;;;;;;;;2462:31;;;;;609:1891;;;;;:::o;1439:145:3:-;1497:7;1516:9;1532:1;1528;:5;1516:17;;1556:1;1551;:6;;1543:15;;;;;;;;1576:1;1569:8;;;1439:145;;;;:::o;13072:855:1:-;13147:4;13167:19;13189:1;13167:23;;13368:14;13450:3;13445:57;;;;13573:4;13568:220;;;;13361:516;;13445:57;13487:1;13472:16;;13445:57;;13568:220;13673:4;13668:3;13663;13648:30;13770:3;13764:10;13749:25;;13361:516;;13919:1;13904:11;:16;;13897:23;;;13072:855;:::o', - 'source': 'pragma solidity ^0.5.2;\n\n/*\n Super Simple Token Subscriptions - https://tokensubscription.com\n //// Breakin’ Through @ University of Wyoming ////\n Austin Thomas Griffith - https://austingriffith.com\n Building on previous works:\n https://github.com/austintgriffith/token-subscription\n https://gist.github.com/androolloyd/0a62ef48887be00a5eff5c17f2be849a\n https://media.consensys.net/subscription-services-on-the-blockchain-erc-948-6ef64b083a36\n https://medium.com/gitcoin/technical-deep-dive-architecture-choices-for-subscriptions-on-the-blockchain-erc948-5fae89cabc7a\n https://github.com/ethereum/EIPs/pull/1337\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1077.md\n https://github.com/gnosis/safe-contracts\n Earlier Meta Transaction Demo:\n https://github.com/austintgriffith/bouncer-proxy\n Huge thanks, as always, to OpenZeppelin for the rad contracts:\n */\n\nimport \\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\\";\nimport \\"openzeppelin-solidity/contracts/math/SafeMath.sol\\";\nimport \\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\\";\n\n\ncontract Subscription {\n using ECDSA for bytes32;\n using SafeMath for uint256;\n\n //who deploys the contract\n address payable public author;\n\n //restrict who can relay the metatx\n address public relayer;\n\n // the publisher may optionally deploy requirements for the subscription\n // so only meta transactions that match the requirements can be relayed\n address public requiredToAddress;\n address public requiredTokenAddress;\n uint256 public requiredTokenAmount;\n uint256 public requiredPeriodSeconds;\n uint256 public requiredGasPrice;\n\n\n // similar to a nonce that avoids replay attacks this allows a single execution\n // every x seconds for a given subscription\n // subscriptionHash => next valid block number\n mapping(bytes32 => uint256) public nextValidTimestamp;\n\n //well use a nonce for each from but because transactions can go through\n //multiple times, we allow anything but users can use this as a signal for\n //uniqueness\n mapping(address => uint256) public extraNonce;\n\n event ExecuteSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event CancelSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n constructor(\n address _toAddress,\n address _tokenAddress,\n uint256 _tokenAmount,\n uint256 _periodSeconds,\n uint256 _gasPrice,\n uint8 _version,\n address _relayer\n ) public {\n requiredToAddress=_toAddress;\n requiredTokenAddress=_tokenAddress;\n requiredTokenAmount=_tokenAmount;\n requiredPeriodSeconds=_periodSeconds;\n requiredGasPrice=_gasPrice;\n author=msg.sender;\n relayer=_relayer;\n }\n\n // this is used by external smart contracts to verify on-chain that a\n // particular subscription is \\"paid\\" and \\"active\\"\n // there must be a small grace period added to allow the publisher\n // or desktop miner to execute\n function isSubscriptionActive(\n bytes32 subscriptionHash,\n uint256 gracePeriodSeconds\n )\n external\n view\n returns (bool)\n {\n if(nextValidTimestamp[subscriptionHash]==uint256(-1)){\n return false;\n }\n return (block.timestamp <=\n nextValidTimestamp[subscriptionHash].add(gracePeriodSeconds)\n );\n }\n\n // given the subscription details, generate a hash and try to kind of follow\n // the eip-191 standard and eip-1077 standard from my dude @avsa\n function getSubscriptionHash(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n )\n public\n view\n returns (bytes32)\n {\n // if there are requirements from the deployer, let\"s make sure\n // those are met exactly\n require( requiredToAddress == address(0) || to == requiredToAddress, \\"requiredToAddress Failure\\" );\n require( requiredTokenAddress == address(0) || tokenAddress == requiredTokenAddress, \\"requiredTokenAddress Failure\\" );\n require( requiredTokenAmount == 0 || tokenAmount == requiredTokenAmount, \\"requiredTokenAmount Failure\\" );\n require( requiredPeriodSeconds == 0 || periodSeconds == requiredPeriodSeconds, \\"requiredPeriodSeconds Failure\\" );\n require( requiredGasPrice == 0 || gasPrice == requiredGasPrice, \\"requiredGasPrice Failure\\" );\n\n return keccak256(\n abi.encodePacked(\n byte(0x19),\n byte(0),\n address(this),\n from,\n to,\n tokenAddress,\n tokenAmount,\n periodSeconds,\n gasPrice\n ));\n }\n\n //ecrecover the signer from hash and the signature\n function getSubscriptionSigner(\n bytes32 subscriptionHash, //hash of subscription\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n pure\n returns (address)\n {\n return subscriptionHash.toEthSignedMessageHash().recover(signature);\n }\n\n //check if a subscription is signed correctly and the timestamp is ready for\n // the next execution to happen\n function isSubscriptionReady(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of the token to incentivize the relay network\n uint256 nonce,// to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n view\n returns (bool)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n uint256 allowance = ERC20(tokenAddress).allowance(from, address(this));\n uint256 balance = ERC20(tokenAddress).balanceOf(from);\n\n return (\n signer == from &&\n from != to &&\n block.timestamp >= nextValidTimestamp[subscriptionHash] &&\n allowance >= tokenAmount.add(gasPrice) &&\n balance >= tokenAmount.add(gasPrice)\n );\n }\n\n // you don\"t really need this if you are using the approve/transferFrom method\n // because you control the flow of tokens by approving this contract address,\n // but to make the contract an extensible example for later user I\"ll add this\n function cancelSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, //to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n\n //the signature must be valid\n require(signer == from, \\"Invalid Signature for subscription cancellation\\");\n\n //make sure it\"s the subscriber\n require(from == msg.sender, \"msg.sender is not the subscriber\");\n\n //nextValidTimestamp should be a timestamp that will never\n //be reached during the brief window human existence\n nextValidTimestamp[subscriptionHash]=uint256(-1);\n\n emit CancelSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n return true;\n }\n\n // execute the transferFrom to pay the publisher from the subscriber\n // the subscriber has full control by approving this contract an allowance\n function executeSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, // to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n require(msg.sender == relayer);\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // make sure the subscription is valid and ready\n require( isSubscriptionReady(from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce, signature), \\"Subscription is not ready or conditions of transction are not met\\" );\n\n //increment the timestamp by the period so it wont be valid until then\n nextValidTimestamp[subscriptionHash] = block.timestamp.add(periodSeconds);\n\n //check to see if this nonce is larger than the current count and we\"ll set that for this \"from\"\n if(nonce > extraNonce[from]){\n extraNonce[from] = nonce;\n }\n\n // now, let make the transfer from the subscriber to the publisher\n uint256 startingBalance = ERC20(tokenAddress).balanceOf(to);\n ERC20(tokenAddress).transferFrom(from,to,tokenAmount);\n require(\n (startingBalance+tokenAmount) == ERC20(tokenAddress).balanceOf(to),\n \\"ERC20 Balance did not change correctly\\"\n );\n\n require(\n checkSuccess(),\n \\"Subscription::executeSubscription TransferFrom failed\\"\n );\n\n\n emit ExecuteSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // it is possible for the subscription execution to be run by a third party\n // incentivized in the terms of the subscription with a gasPrice of the tokens\n // - pay that out now...\n if (gasPrice > 0) {\n //the relayer is incentivized by a little of the same token from\n // the subscriber ... as far as the subscriber knows, they are\n // just sending X tokens to the publisher, but the publisher can\n // choose to send Y of those X to a relayer to run their transactions\n // the publisher will receive X - Y tokens\n // this must all be setup in the constructor\n // if not, the subscriber chooses all the params including what goes\n // to the publisher and what goes to the relayer\n ERC20(tokenAddress).transferFrom(from, msg.sender, gasPrice);\n require(\n checkSuccess(),\n \\"Subscription::executeSubscription Failed to pay gas as from account\\"\n );\n }\n\n return true;\n }\n\n // because of issues with non-standard erc20s the transferFrom can always return false\n // to fix this we run it and then check the return of the previous function:\n // https://github.com/ethereum/solidity/issues/4116\n /**\n * Checks the return value of the previous function. Returns true if the previous function\n * function returned 32 non-zero bytes or returned zero bytes.\n */\n function checkSuccess(\n )\n private\n pure\n returns (bool)\n {\n uint256 returnValue = 0;\n\n /* solium-disable-next-line security/no-inline-assembly */\n assembly {\n // check number of bytes returned from last function call\n switch returndatasize\n\n // no bytes returned: assume success\n case 0x0 {\n returnValue := 1\n }\n\n // 32 bytes returned: check if non-zero\n case 0x20 {\n // copy 32 bytes into scratch space\n returndatacopy(0x0, 0x0, 0x20)\n\n // load those bytes into returnValue\n returnValue := mload(0x0)\n }\n\n // not sure what was returned: dont mark as success\n default { }\n }\n\n return returnValue != 0;\n }\n\n //we would like a way for the author to completly destroy the subscription\n // contract to prevent further transfers\n function endContract()\n external\n {\n require(msg.sender==author);\n selfdestruct(author);\n }\n\n // let\"s go ahead and revert any ETH sent directly to the contract\n function () external payable {\n revert ();\n }\n}\n', + 'metadata': '{\'compiler\':{\'version\':\'0.5.2+commit.1df8f40c\'},\'language\':\'Solidity\',\'output\':{\'abi\':[{\'constant\':true,\'inputs\':[],\'name\':\'requiredGasPrice\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'subscriptionHash\',\'type\':\'bytes32\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'getSubscriptionSigner\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'pure\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredTokenAmount\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[{\'name\':\'_newOwner\',\'type\':\'address\'}],\'name\':\'changeOwnership\',\'outputs\':[],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredToAddress\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredPeriodSeconds\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'requiredTokenAddress\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'cancelSubscription\',\'outputs\':[{\'name\':\'success\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'relayer\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'owner\',\'outputs\':[{\'name\':\'\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[],\'name\':\'contractVersion\',\'outputs\':[{\'name\':\'\',\'type\':\'uint8\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'\',\'type\':\'address\'}],\'name\':\'extraNonce\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'subscriptionHash\',\'type\':\'bytes32\'},{\'name\':\'gracePeriodSeconds\',\'type\':\'uint256\'}],\'name\':\'isSubscriptionActive\',\'outputs\':[{\'name\':\'\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[],\'name\':\'endContract\',\'outputs\':[],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'getSubscriptionHash\',\'outputs\':[{\'name\':\'\',\'type\':\'bytes32\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':false,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'executeSubscription\',\'outputs\':[{\'name\':\'success\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'from\',\'type\':\'address\'},{\'name\':\'to\',\'type\':\'address\'},{\'name\':\'tokenAddress\',\'type\':\'address\'},{\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'name\':\'nonce\',\'type\':\'uint256\'},{\'name\':\'signature\',\'type\':\'bytes\'}],\'name\':\'isSubscriptionReady\',\'outputs\':[{\'name\':\'\',\'type\':\'bool\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'constant\':true,\'inputs\':[{\'name\':\'\',\'type\':\'bytes32\'}],\'name\':\'nextValidTimestamp\',\'outputs\':[{\'name\':\'\',\'type\':\'uint256\'}],\'payable\':false,\'stateMutability\':\'view\',\'type\':\'function\'},{\'inputs\':[{\'name\':\'_toAddress\',\'type\':\'address\'},{\'name\':\'_tokenAddress\',\'type\':\'address\'},{\'name\':\'_tokenAmount\',\'type\':\'uint256\'},{\'name\':\'_periodSeconds\',\'type\':\'uint256\'},{\'name\':\'_gasPrice\',\'type\':\'uint256\'},{\'name\':\'_version\',\'type\':\'uint8\'},{\'name\':\'_relayer\',\'type\':\'address\'}],\'payable\':false,\'stateMutability\':\'nonpayable\',\'type\':\'constructor\'},{\'payable\':true,\'stateMutability\':\'payable\',\'type\':\'fallback\'},{\'anonymous\':false,\'inputs\':[{\'indexed\':true,\'name\':\'from\',\'type\':\'address\'},{\'indexed\':true,\'name\':\'to\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAddress\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'ExecuteSubscription\',\'type\':\'event\'},{\'anonymous\':false,\'inputs\':[{\'indexed\':true,\'name\':\'from\',\'type\':\'address\'},{\'indexed\':true,\'name\':\'to\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAddress\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'tokenAmount\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'periodSeconds\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'gasPrice\',\'type\':\'uint256\'},{\'indexed\':false,\'name\':\'nonce\',\'type\':\'uint256\'}],\'name\':\'CancelSubscription\',\'type\':\'event\'},{\'anonymous\':false,\'inputs\':[{\'indexed\':false,\'name\':\'oldOwner\',\'type\':\'address\'},{\'indexed\':false,\'name\':\'newOwner\',\'type\':\'address\'}],\'name\':\'ownershipChanged\',\'type\':\'event\'}],\'devdoc\':{\'methods\':{}},\'userdoc\':{\'methods\':{}}},\'settings\':{\'compilationTarget\':{\'/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\':\'Subscription\'},\'evmVersion\':\'byzantium\',\'libraries\':{},\'optimizer\':{\'enabled\':false,\'runs\':200},\'remappings\':[]},\'sources\':{\'/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\':{\'keccak256\':\'0x43c85edd952b07c020951e8722803e352346d9de2d4e238986ebcdd542c526be\',\'urls\':[\'bzzr://cc97df4fc13be767dbd247833986b668b9622c4fa0fa231292af8a70ef20a8a1\']},\'openzeppelin-solidity/contracts/cryptography/ECDSA.sol\':{\'keccak256\':\'0x0cbeb7f69b70ff62eb5536caebbc8701b6490ae7ee2e252d77891cf6eba11326\',\'urls\':[\'bzzr://58a443499466ee0706d22af81b43ab6779b519255fbc66276546386ec00a30d7\']},\'openzeppelin-solidity/contracts/math/SafeMath.sol\':{\'keccak256\':\'0xc2a200a877c4a9b2475c246c54ffecc69ffde3e11af83319c63c2dc5458bac80\',\'urls\':[\'bzzr://c8876e2c39b60f155d748d71d715c8f3903fae5a405ac599adcb6ad2f9a583f9\']},\'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\':{\'keccak256\':\'0x3dceb7e4aa237a56111c13f77d7efadeceda7271d62bfac94ac79afab7c1f411\',\'urls\':[\'bzzr://2f34152a5bec385352002c31bc89f5e9935f628f1923ccea45c2281e0084a4db\']},\'openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\':{\'keccak256\':\'0x59e7df16169a498cb8837963b2f5461d88e63bd1eb6c7d58b814d76b84ccbe61\',\'urls\':[\'bzzr://e572c9c4e02e37349702451bf3b5dcbbc86a19da5a51695b5b3e1bfe1e7825dc\']}},\'version\':1}', + 'bytecode': '0x608060405234801561001057600080fd5b5060405160e080612562833981018060405260e081101561003057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846004819055508360058190555082600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600060146101000a81548160ff021916908360ff1602179055505050505050505061239b806101c76000396000f3fe608060405260043610610126576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100b2578063bb6e7de911610081578063bb6e7de9146106c7578063c8147865146106de578063d3c576cd146107ab578063d933c06614610914578063ff59bff814610a7d57610126565b80638da5cb5b1461057d578063a0a8e460146105d4578063a3d53d1814610605578063ae702ba41461066a57610126565b8063384c3335116100f9578063384c3335146102e45780636b40bba11461033b5780636f264b2e1461036657806371d22d4d146103bd5780638406c0791461052657610126565b806310d920601461012b57806318f321a31461015657806329d428ca146102685780632af4c31e14610293575b600080fd5b34801561013757600080fd5b50610140610acc565b6040518082815260200191505060405180910390f35b34801561016257600080fd5b506102266004803603604081101561017957600080fd5b8101908080359060200190929190803590602001906401000000008111156101a057600080fd5b8201836020820111156101b257600080fd5b803590602001918460018302840111640100000000831117156101d457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ad2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027457600080fd5b5061027d610af7565b6040518082815260200191505060405180910390f35b34801561029f57600080fd5b506102e2600480360360208110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610afd565b005b3480156102f057600080fd5b506102f9610c53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034757600080fd5b50610350610c79565b6040518082815260200191505060405180910390f35b34801561037257600080fd5b5061037b610c7f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c957600080fd5b5061050c60048036036101008110156103e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561048657600080fd5b82018360208201111561049857600080fd5b803590602001918460018302840111640100000000831117156104ba57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ca5565b604051808215151515815260200191505060405180910390f35b34801561053257600080fd5b5061053b610eeb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561058957600080fd5b50610592610f11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e057600080fd5b506105e9610f36565b604051808260ff1660ff16815260200191505060405180910390f35b34801561061157600080fd5b506106546004803603602081101561062857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f49565b6040518082815260200191505060405180910390f35b34801561067657600080fd5b506106ad6004803603604081101561068d57600080fd5b810190808035906020019092919080359060200190929190505050610f61565b604051808215151515815260200191505060405180910390f35b3480156106d357600080fd5b506106dc610fd9565b005b3480156106ea57600080fd5b50610795600480360360e081101561070157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061106e565b6040518082815260200191505060405180910390f35b3480156107b757600080fd5b506108fa60048036036101008110156107cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561087457600080fd5b82018360208201111561088657600080fd5b803590602001918460018302840111640100000000831117156108a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061166b565b604051808215151515815260200191505060405180910390f35b34801561092057600080fd5b50610a63600480360361010081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109dd57600080fd5b8201836020820111156109ef57600080fd5b80359060200191846001830284011164010000000083111715610a1157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611db1565b604051808215151515815260200191505060405180910390f35b348015610a8957600080fd5b50610ab660048036036020811015610aa057600080fd5b810190808035906020019092919050505061208b565b6040518082815260200191505060405180910390f35b60065481565b6000610aef82610ae1856120a3565b6120fb90919063ffffffff16565b905092915050565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5857600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5d92051b4a9b6e7154c5be37e18edd17bfd2e650a3a6dbf8c3eded0ef431ff0e336000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610cb78a8a8a8a8a8a8a61106e565b90506000610cc58285610ad2565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612262602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060149054906101000a900460ff1681565b60086020528060005260406000206000915090505481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610fa75760009050610fd3565b610fcd82600760008681526020019081526020016000205461220290919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561103457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111195750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b151561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112375750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156112ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806112bd575060045485145b1515611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611343575060055484145b15156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806113c9575060065483145b151561143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116c957600080fd5b60006116da8a8a8a8a8a8a8a61106e565b90506116ec8a8a8a8a8a8a8a8a611db1565b1515611743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806123096041913960600191505060405180910390fd5b611756864261220290919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156117f95783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119a857600080fd5b505af11580156119bc573d6000803e3d6000fd5b505050506040513d60208110156119d257600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a7d57600080fd5b505afa158015611a91573d6000803e3d6000fd5b505050506040513d6020811015611aa757600080fd5b8101908080519060200190929190505050888201141515611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061234a6026913960400191505060405180910390fd5b611b1b612223565b1515611b72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806122916035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611d9f578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0357600080fd5b505af1158015611d17573d6000803e3d6000fd5b505050506040513d6020811015611d2d57600080fd5b810190808051906020019092919050505050611d47612223565b1515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806122c66043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611dc38a8a8a8a8a8a8a61106e565b90506000611dd18285610ad2565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ea257600080fd5b505afa158015611eb6573d6000803e3d6000fd5b505050506040513d6020811015611ecc57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561201e57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b801561203d575060076000858152602001908152602001600020544210155b801561205b5750612057888b61220290919063ffffffff16565b8210155b80156120795750612075888b61220290919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60006041825114151561211157600090506121fc565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260019004111561216657600093505050506121fc565b601b8160ff161415801561217e5750601c8160ff1614155b1561218f57600093505050506121fc565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ec573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561221957600080fd5b8091505092915050565b600080600090503d60008114612240576020811461224957612255565b60019150612255565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a723058202df60f746d4c742afa80c2f5e3dcb8e55b1f61d5cef42378807b775d5e0a17660029', + 'deployedBytecode': '0x608060405260043610610126576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100b2578063bb6e7de911610081578063bb6e7de9146106c7578063c8147865146106de578063d3c576cd146107ab578063d933c06614610914578063ff59bff814610a7d57610126565b80638da5cb5b1461057d578063a0a8e460146105d4578063a3d53d1814610605578063ae702ba41461066a57610126565b8063384c3335116100f9578063384c3335146102e45780636b40bba11461033b5780636f264b2e1461036657806371d22d4d146103bd5780638406c0791461052657610126565b806310d920601461012b57806318f321a31461015657806329d428ca146102685780632af4c31e14610293575b600080fd5b34801561013757600080fd5b50610140610acc565b6040518082815260200191505060405180910390f35b34801561016257600080fd5b506102266004803603604081101561017957600080fd5b8101908080359060200190929190803590602001906401000000008111156101a057600080fd5b8201836020820111156101b257600080fd5b803590602001918460018302840111640100000000831117156101d457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ad2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027457600080fd5b5061027d610af7565b6040518082815260200191505060405180910390f35b34801561029f57600080fd5b506102e2600480360360208110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610afd565b005b3480156102f057600080fd5b506102f9610c53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034757600080fd5b50610350610c79565b6040518082815260200191505060405180910390f35b34801561037257600080fd5b5061037b610c7f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c957600080fd5b5061050c60048036036101008110156103e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561048657600080fd5b82018360208201111561049857600080fd5b803590602001918460018302840111640100000000831117156104ba57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ca5565b604051808215151515815260200191505060405180910390f35b34801561053257600080fd5b5061053b610eeb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561058957600080fd5b50610592610f11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e057600080fd5b506105e9610f36565b604051808260ff1660ff16815260200191505060405180910390f35b34801561061157600080fd5b506106546004803603602081101561062857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f49565b6040518082815260200191505060405180910390f35b34801561067657600080fd5b506106ad6004803603604081101561068d57600080fd5b810190808035906020019092919080359060200190929190505050610f61565b604051808215151515815260200191505060405180910390f35b3480156106d357600080fd5b506106dc610fd9565b005b3480156106ea57600080fd5b50610795600480360360e081101561070157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061106e565b6040518082815260200191505060405180910390f35b3480156107b757600080fd5b506108fa60048036036101008110156107cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561087457600080fd5b82018360208201111561088657600080fd5b803590602001918460018302840111640100000000831117156108a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061166b565b604051808215151515815260200191505060405180910390f35b34801561092057600080fd5b50610a63600480360361010081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109dd57600080fd5b8201836020820111156109ef57600080fd5b80359060200191846001830284011164010000000083111715610a1157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611db1565b604051808215151515815260200191505060405180910390f35b348015610a8957600080fd5b50610ab660048036036020811015610aa057600080fd5b810190808035906020019092919050505061208b565b6040518082815260200191505060405180910390f35b60065481565b6000610aef82610ae1856120a3565b6120fb90919063ffffffff16565b905092915050565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5857600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5d92051b4a9b6e7154c5be37e18edd17bfd2e650a3a6dbf8c3eded0ef431ff0e336000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610cb78a8a8a8a8a8a8a61106e565b90506000610cc58285610ad2565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612262602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060149054906101000a900460ff1681565b60086020528060005260406000206000915090505481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610fa75760009050610fd3565b610fcd82600760008681526020019081526020016000205461220290919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561103457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111195750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b151561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112375750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156112ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806112bd575060045485145b1515611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611343575060055484145b15156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806113c9575060065483145b151561143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116c957600080fd5b60006116da8a8a8a8a8a8a8a61106e565b90506116ec8a8a8a8a8a8a8a8a611db1565b1515611743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806123096041913960600191505060405180910390fd5b611756864261220290919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156117f95783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119a857600080fd5b505af11580156119bc573d6000803e3d6000fd5b505050506040513d60208110156119d257600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a7d57600080fd5b505afa158015611a91573d6000803e3d6000fd5b505050506040513d6020811015611aa757600080fd5b8101908080519060200190929190505050888201141515611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061234a6026913960400191505060405180910390fd5b611b1b612223565b1515611b72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806122916035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611d9f578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0357600080fd5b505af1158015611d17573d6000803e3d6000fd5b505050506040513d6020811015611d2d57600080fd5b810190808051906020019092919050505050611d47612223565b1515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806122c66043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611dc38a8a8a8a8a8a8a61106e565b90506000611dd18285610ad2565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ea257600080fd5b505afa158015611eb6573d6000803e3d6000fd5b505050506040513d6020811015611ecc57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561201e57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b801561203d575060076000858152602001908152602001600020544210155b801561205b5750612057888b61220290919063ffffffff16565b8210155b80156120795750612075888b61220290919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60006041825114151561211157600090506121fc565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260019004111561216657600093505050506121fc565b601b8160ff161415801561217e5750601c8160ff1614155b1561218f57600093505050506121fc565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ec573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561221957600080fd5b8091505092915050565b600080600090503d60008114612240576020811461224957612255565b60019150612255565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a723058202df60f746d4c742afa80c2f5e3dcb8e55b1f61d5cef42378807b775d5e0a17660029', + 'sourceMap': '1091:13546:1:-;;;3265:515;8:9:-1;5:2;;;30:1;27;20:12;5:2;3265:515:1;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3265:515:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3516:10;3498:17;;:28;;;;;;;;;;;;;;;;;;3557:13;3536:20;;:34;;;;;;;;;;;;;;;;;;3600:12;3580:19;:32;;;;3644:14;3622:21;:36;;;;3685:9;3668:16;:26;;;;3710:10;3704:5;;:16;;;;;;;;;;;;;;;;;;3738:8;3730:7;;:16;;;;;;;;;;;;;;;;;;3772:1;3756:15;;:17;;;;;;;;;;;;;;;;;;3265:515;;;;;;;1091:13546;;;;;;', + 'deployedSourceMap': '1091:13546:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14619:9;;;1664:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1664:31:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6364:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6364:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6364:318:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6364:318:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6364:318:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6364:318:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6364:318:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1582:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1582:34:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3786:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3786:183:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3786:183:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;1503:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1503:32:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1622:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1622:36:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1541:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1541:35:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8320:1423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8320:1423:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8320:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8320:1423:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8320:1423:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8320:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8320:1423:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1321:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1321:22:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1212:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1212:28:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1246;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1246:28:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2121:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2121:45:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2121:45:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4209:390;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4209:390:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4209:390:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14392:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14392:112:1;;;:::i;:::-;;4755:1548;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4755:1548:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4755:1548:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9901:3091;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9901:3091:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9901:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9901:3091:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9901:3091:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9901:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9901:3091:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6805:1261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6805:1261:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6805:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6805:1261:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6805:1261:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6805:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6805:1261:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1887:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1887:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1887:53:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1664:31;;;;:::o;6364:318::-;6585:7;6615:60;6665:9;6615:41;:16;:39;:41::i;:::-;:49;;:60;;;;:::i;:::-;6608:67;;6364:318;;;;:::o;1582:34::-;;;;:::o;3786:183::-;3883:5;;;;;;;;;;;3871:17;;:10;:17;;;3863:26;;;;;;;;3905:9;3897:5;;:17;;;;;;;;;;;;;;;;;;3927:35;3944:10;3956:5;;;;;;;;;;;3927:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3786:183;:::o;1503:32::-;;;;;;;;;;;;;:::o;1622:36::-;;;;:::o;1541:35::-;;;;;;;;;;;;;:::o;8320:1423::-;8923:12;8951:24;8978:110;9011:4;9017:2;9021:12;9035:11;9048:13;9063:8;9073:5;8978:19;:110::i;:::-;8951:137;;9098:14;9115:50;9137:16;9155:9;9115:21;:50::i;:::-;9098:67;;9232:4;9222:14;;:6;:14;;;9214:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9355:10;9347:18;;:4;:18;;;9339:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9586:2;9541:18;:36;9560:16;9541:36;;;;;;;;;;;:48;;;;9643:2;9605:109;;9637:4;9605:109;;;9647:12;9661:11;9674:13;9689:8;9699:5;9605:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9732:4;9725:11;;;;8320:1423;;;;;;;;;;:::o;1321:22::-;;;;;;;;;;;;;:::o;1212:28::-;;;;;;;;;;;;;:::o;1246:::-;;;;;;;;;;;;;:::o;2121:45::-;;;;;;;;;;;;;;;;;:::o;4209:390::-;4362:4;4431:2;4385:18;:36;4404:16;4385:36;;;;;;;;;;;;:49;4382:88;;;4454:5;4447:12;;;;4382:88;4522:60;4563:18;4522;:36;4541:16;4522:36;;;;;;;;;;;;:40;;:60;;;;:::i;:::-;4487:15;:95;;4479:113;;4209:390;;;;;:::o;14392:112::-;14464:5;;;;;;;;;;;14452:17;;:10;:17;;;14444:26;;;;;;;;14491:5;;;;;;;;;;;14478:19;;;4755:1548;5291:7;5457:1;5428:31;;:17;;;;;;;;;;;:31;;;:58;;;;5469:17;;;;;;;;;;;5463:23;;:2;:23;;;5428:58;5419:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5568:1;5536:34;;:20;;;;;;;;;;;:34;;;:74;;;;5590:20;;;;;;;;;;;5574:36;;:12;:36;;;5536:74;5527:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5687:1;5664:19;;:24;:62;;;;5707:19;;5692:11;:34;5664:62;5655:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5804:1;5779:21;;:26;:68;;;;5826:21;;5809:13;:38;5779:68;5770:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5922:1;5902:16;;:21;:53;;;;5939:16;;5927:8;:28;5902:53;5893:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6066:4;6061:10;;6094:1;6089:7;;6122:4;6145;6167:2;6187:12;6217:11;6246:13;6277:8;6027:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6027:268:1;;;6004:292;;;;;;5997:299;;4755:1548;;;;;;;;;:::o;9901:3091::-;10506:12;10556:7;;;;;;;;;;;10542:21;;:10;:21;;;10534:30;;;;;;;;10574:24;10601:110;10634:4;10640:2;10644:12;10658:11;10671:13;10686:8;10696:5;10601:19;:110::i;:::-;10574:137;;10788:99;10808:4;10814:2;10818:12;10832:11;10845:13;10860:8;10870:5;10877:9;10788:19;:99::i;:::-;10779:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11087:34;11107:13;11087:15;:19;;:34;;;;:::i;:::-;11048:18;:36;11067:16;11048:36;;;;;;;;;;;:73;;;;11248:10;:16;11259:4;11248:16;;;;;;;;;;;;;;;;11240:5;:24;11237:75;;;11296:5;11277:10;:16;11288:4;11277:16;;;;;;;;;;;;;;;:24;;;;11237:75;11397:23;11429:12;11423:29;;;11453:2;11423:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11423:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11423:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11423:33:1;;;;;;;;;;;;;;;;11397:59;;11472:12;11466:32;;;11499:4;11504:2;11507:11;11466:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11466:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11466:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11466:53:1;;;;;;;;;;;;;;;;;11587:12;11581:29;;;11611:2;11581:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11581:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11581:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11581:33:1;;;;;;;;;;;;;;;;11565:11;11549:15;:27;11548:66;11529:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11706:14;:12;:14::i;:::-;11687:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11855:2;11816:110;;11849:4;11816:110;;;11859:12;11873:11;11886:13;11901:8;11911:5;11816:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12157:1;12146:8;:12;12142:822;;;12745:12;12739:32;;;12772:4;12778:10;12790:8;12739:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12739:60:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12739:60:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12739:60:1;;;;;;;;;;;;;;;;;12838:14;:12;:14::i;:::-;12813:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12142:822;12981:4;12974:11;;;;9901:3091;;;;;;;;;;:::o;6805:1261::-;7423:4;7443:24;7470:110;7503:4;7509:2;7513:12;7527:11;7540:13;7555:8;7565:5;7470:19;:110::i;:::-;7443:137;;7590:14;7607:50;7629:16;7647:9;7607:21;:50::i;:::-;7590:67;;7667:17;7693:12;7687:29;;;7717:4;7731;7687:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7687:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7687:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7687:50:1;;;;;;;;;;;;;;;;7667:70;;7747:15;7771:12;7765:29;;;7795:4;7765:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7765:35:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7765:35:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7765:35:1;;;;;;;;;;;;;;;;7747:53;;7842:4;7832:14;;:6;:14;;;:40;;;;;7870:2;7862:10;;:4;:10;;;;7832:40;:111;;;;;7907:18;:36;7926:16;7907:36;;;;;;;;;;;;7888:15;:55;;7832:111;:165;;;;;7972:25;7988:8;7972:11;:15;;:25;;;;:::i;:::-;7959:9;:38;;7832:165;:217;;;;;8024:25;8040:8;8024:11;:15;;:25;;;;:::i;:::-;8013:7;:36;;7832:217;7811:248;;;;;;6805:1261;;;;;;;;;;:::o;1887:53::-;;;;;;;;;;;;;;;;;:::o;2650:265:2:-;2719:7;2902:4;2849:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2849:58:2;;;2839:69;;;;;;2832:76;;2650:265;;;:::o;609:1891::-;687:7;768:2;748:9;:16;:22;;744:72;;;802:1;786:19;;;;744:72;882:9;901;920:7;1166:4;1155:9;1151:20;1145:27;1140:32;;1211:4;1200:9;1196:20;1190:27;1185:32;;1264:4;1253:9;1249:20;1243:27;1240:1;1235:36;1230:41;;2182:66;2177:1;2169:10;;;:79;2165:127;;;2279:1;2264:17;;;;;;;2165:127;2311:2;2306:1;:7;;;;:18;;;;;2322:2;2317:1;:7;;;;2306:18;2302:66;;;2355:1;2340:17;;;;;;;2302:66;2469:24;2479:4;2485:1;2488;2491;2469:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2469:24:2;;;;;;;;2462:31;;;;;609:1891;;;;;:::o;1439:145:3:-;1497:7;1516:9;1532:1;1528;:5;1516:17;;1556:1;1551;:6;;1543:15;;;;;;;;1576:1;1569:8;;;1439:145;;;;:::o;13407:855:1:-;13482:4;13502:19;13524:1;13502:23;;13703:14;13785:3;13780:57;;;;13908:4;13903:220;;;;13696:516;;13780:57;13822:1;13807:16;;13780:57;;13903:220;14008:4;14003:3;13998;13983:30;14105:3;14099:10;14084:25;;13696:516;;14254:1;14239:11;:16;;14232:23;;;13407:855;:::o', + 'source': 'pragma solidity ^0.5.2;\n\n/*\n Super Simple Token Subscriptions - https://tokensubscription.com\n //// Breakin’ Through @ University of Wyoming ////\n Austin Thomas Griffith - https://austingriffith.com\n Building on previous works:\n https://github.com/austintgriffith/token-subscription\n https://gist.github.com/androolloyd/0a62ef48887be00a5eff5c17f2be849a\n https://media.consensys.net/subscription-services-on-the-blockchain-erc-948-6ef64b083a36\n https://medium.com/gitcoin/technical-deep-dive-architecture-choices-for-subscriptions-on-the-blockchain-erc948-5fae89cabc7a\n https://github.com/ethereum/EIPs/pull/1337\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1077.md\n https://github.com/gnosis/safe-contracts\n Earlier Meta Transaction Demo:\n https://github.com/austintgriffith/bouncer-proxy\n Huge thanks, as always, to OpenZeppelin for the rad contracts:\n */\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\n\n\ncontract Subscription {\n using ECDSA for bytes32;\n using SafeMath for uint256;\n\n //who deploys the contract\n address payable public owner;\n uint8 public contractVersion;\n\n //restrict who can relay the metatx\n address public relayer;\n\n // the publisher may optionally deploy requirements for the subscription\n // so only meta transactions that match the requirements can be relayed\n address public requiredToAddress;\n address public requiredTokenAddress;\n uint256 public requiredTokenAmount;\n uint256 public requiredPeriodSeconds;\n uint256 public requiredGasPrice;\n\n\n // similar to a nonce that avoids replay attacks this allows a single execution\n // every x seconds for a given subscription\n // subscriptionHash => next valid block number\n mapping(bytes32 => uint256) public nextValidTimestamp;\n\n //we"ll use a nonce for each from but because transactions can go through\n //multiple times, we allow anything but users can use this as a signal for\n //uniqueness\n mapping(address => uint256) public extraNonce;\n\n event ExecuteSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event CancelSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event ownershipChanged(\n address oldOwner,\n address newOwner\n );\n\n constructor(\n address _toAddress,\n address _tokenAddress,\n uint256 _tokenAmount,\n uint256 _periodSeconds,\n uint256 _gasPrice,\n uint8 _version,\n address _relayer\n ) public {\n requiredToAddress=_toAddress;\n requiredTokenAddress=_tokenAddress;\n requiredTokenAmount=_tokenAmount;\n requiredPeriodSeconds=_periodSeconds;\n requiredGasPrice=_gasPrice;\n owner=msg.sender;\n relayer=_relayer;\n contractVersion=1;\n }\n\n function changeOwnership(address payable _newOwner)\n public\n {\n require(msg.sender==owner);\n owner = _newOwner;\n emit ownershipChanged(msg.sender, owner);\n }\n\n // this is used by external smart contracts to verify on-chain that a\n // particular subscription is \"paid\" and \"active\"\n // there must be a small grace period added to allow the publisher\n // or desktop miner to execute\n function isSubscriptionActive(\n bytes32 subscriptionHash,\n uint256 gracePeriodSeconds\n )\n external\n view\n returns (bool)\n {\n if(nextValidTimestamp[subscriptionHash]==uint256(-1)){\n return false;\n }\n return (block.timestamp <=\n nextValidTimestamp[subscriptionHash].add(gracePeriodSeconds)\n );\n }\n\n // given the subscription details, generate a hash and try to kind of follow\n // the eip-191 standard and eip-1077 standard from my dude @avsa\n function getSubscriptionHash(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n )\n public\n view\n returns (bytes32)\n {\n // if there are requirements from the deployer, let"s make sure\n // those are met exactly\n require( requiredToAddress == address(0) || to == requiredToAddress, \"requiredToAddress Failure\" );\n require( requiredTokenAddress == address(0) || tokenAddress == requiredTokenAddress, \"requiredTokenAddress Failure\" );\n require( requiredTokenAmount == 0 || tokenAmount == requiredTokenAmount, \"requiredTokenAmount Failure\" );\n require( requiredPeriodSeconds == 0 || periodSeconds == requiredPeriodSeconds, \"requiredPeriodSeconds Failure\" );\n require( requiredGasPrice == 0 || gasPrice == requiredGasPrice, \"requiredGasPrice Failure\" );\n\n return keccak256(\n abi.encodePacked(\n byte(0x19),\n byte(0),\n address(this),\n from,\n to,\n tokenAddress,\n tokenAmount,\n periodSeconds,\n gasPrice\n ));\n }\n\n //ecrecover the signer from hash and the signature\n function getSubscriptionSigner(\n bytes32 subscriptionHash, //hash of subscription\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n pure\n returns (address)\n {\n return subscriptionHash.toEthSignedMessageHash().recover(signature);\n }\n\n //check if a subscription is signed correctly and the timestamp is ready for\n // the next execution to happen\n function isSubscriptionReady(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of the token to incentivize the relay network\n uint256 nonce,// to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n view\n returns (bool)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n uint256 allowance = ERC20(tokenAddress).allowance(from, address(this));\n uint256 balance = ERC20(tokenAddress).balanceOf(from);\n\n return (\n signer == from &&\n from != to &&\n block.timestamp >= nextValidTimestamp[subscriptionHash] &&\n allowance >= tokenAmount.add(gasPrice) &&\n balance >= tokenAmount.add(gasPrice)\n );\n }\n\n // you don"t really need this if you are using the approve/transferFrom method\n // because you control the flow of tokens by approving this contract address,\n // but to make the contract an extensible example for later user I"ll add this\n function cancelSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, //to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n\n //the signature must be valid\n require(signer == from, \"Invalid Signature for subscription cancellation\");\n\n //make sure it"s the subscriber\n require(from == msg.sender, "msg.sender is not the subscriber");\n\n //nextValidTimestamp should be a timestamp that will never\n //be reached during the brief window human existence\n nextValidTimestamp[subscriptionHash]=uint256(-1);\n\n emit CancelSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n return true;\n }\n\n // execute the transferFrom to pay the publisher from the subscriber\n // the subscriber has full control by approving this contract an allowance\n function executeSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, // to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n require(msg.sender == relayer);\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // make sure the subscription is valid and ready\n require( isSubscriptionReady(from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce, signature), \"Subscription is not ready or conditions of transction are not met\" );\n\n //increment the timestamp by the period so it wont be valid until then\n nextValidTimestamp[subscriptionHash] = block.timestamp.add(periodSeconds);\n\n //check to see if this nonce is larger than the current count and we"ll set that for this "from"\n if(nonce > extraNonce[from]){\n extraNonce[from] = nonce;\n }\n\n // now, let make the transfer from the subscriber to the publisher\n uint256 startingBalance = ERC20(tokenAddress).balanceOf(to);\n ERC20(tokenAddress).transferFrom(from,to,tokenAmount);\n require(\n (startingBalance+tokenAmount) == ERC20(tokenAddress).balanceOf(to),\n \"ERC20 Balance did not change correctly\"\n );\n\n require(\n checkSuccess(),\n \"Subscription::executeSubscription TransferFrom failed\"\n );\n\n\n emit ExecuteSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // it is possible for the subscription execution to be run by a third party\n // incentivized in the terms of the subscription with a gasPrice of the tokens\n // - pay that out now...\n if (gasPrice > 0) {\n //the relayer is incentivized by a little of the same token from\n // the subscriber ... as far as the subscriber knows, they are\n // just sending X tokens to the publisher, but the publisher can\n // choose to send Y of those X to a relayer to run their transactions\n // the publisher will receive X - Y tokens\n // this must all be setup in the constructor\n // if not, the subscriber chooses all the params including what goes\n // to the publisher and what goes to the relayer\n ERC20(tokenAddress).transferFrom(from, msg.sender, gasPrice);\n require(\n checkSuccess(),\n \"Subscription::executeSubscription Failed to pay gas as from account\"\n );\n }\n\n return true;\n }\n\n // because of issues with non-standard erc20s the transferFrom can always return false\n // to fix this we run it and then check the return of the previous function:\n // https://github.com/ethereum/solidity/issues/4116\n /**\n * Checks the return value of the previous function. Returns true if the previous function\n * function returned 32 non-zero bytes or returned zero bytes.\n */\n function checkSuccess(\n )\n private\n pure\n returns (bool)\n {\n uint256 returnValue = 0;\n\n /* solium-disable-next-line security/no-inline-assembly */\n assembly {\n // check number of bytes returned from last function call\n switch returndatasize\n\n // no bytes returned: assume success\n case 0x0 {\n returnValue := 1\n }\n\n // 32 bytes returned: check if non-zero\n case 0x20 {\n // copy 32 bytes into scratch space\n returndatacopy(0x0, 0x0, 0x20)\n\n // load those bytes into returnValue\n returnValue := mload(0x0)\n }\n\n // not sure what was returned: dont mark as success\n default { }\n }\n\n return returnValue != 0;\n }\n\n //we would like a way for the author to completly destroy the subscription\n // contract to prevent further transfers\n function endContract()\n external\n {\n require(msg.sender==owner);\n selfdestruct(owner);\n }\n\n // let"s go ahead and revert any ETH sent directly to the contract\n function () external payable {\n revert ();\n }\n}\n', 'sourcePath': '/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol', 'ast': { 'absolutePath': '/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol', 'exportedSymbols': { 'Subscription': [ - 675 + 710 ] }, - 'id': 676, + 'id': 711, 'nodeType': 'SourceUnit', 'nodes': [ { @@ -534,8 +579,8 @@ let compiledSubscription1 = { 'file': 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol', 'id': 59, 'nodeType': 'ImportDirective', - 'scope': 676, - 'sourceUnit': 757, + 'scope': 711, + 'sourceUnit': 792, 'src': '900:64:1', 'symbolAliases': [], 'unitAlias': '' @@ -545,8 +590,8 @@ let compiledSubscription1 = { 'file': 'openzeppelin-solidity/contracts/math/SafeMath.sol', 'id': 60, 'nodeType': 'ImportDirective', - 'scope': 676, - 'sourceUnit': 885, + 'scope': 711, + 'sourceUnit': 920, 'src': '965:59:1', 'symbolAliases': [], 'unitAlias': '' @@ -556,8 +601,8 @@ let compiledSubscription1 = { 'file': 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol', 'id': 61, 'nodeType': 'ImportDirective', - 'scope': 676, - 'sourceUnit': 1268, + 'scope': 711, + 'sourceUnit': 1303, 'src': '1025:63:1', 'symbolAliases': [], 'unitAlias': '' @@ -568,9 +613,9 @@ let compiledSubscription1 = { 'contractKind': 'contract', 'documentation': null, 'fullyImplemented': true, - 'id': 675, + 'id': 710, 'linearizedBaseContracts': [ - 675 + 710 ], 'name': 'Subscription', 'nodeType': 'ContractDefinition', @@ -582,10 +627,10 @@ let compiledSubscription1 = { 'id': 62, 'name': 'ECDSA', 'nodeType': 'UserDefinedTypeName', - 'referencedDeclaration': 756, + 'referencedDeclaration': 791, 'src': '1125:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ECDSA_$756', + 'typeIdentifier': 't_contract$_ECDSA_$791', 'typeString': 'library ECDSA' } }, @@ -609,10 +654,10 @@ let compiledSubscription1 = { 'id': 65, 'name': 'SafeMath', 'nodeType': 'UserDefinedTypeName', - 'referencedDeclaration': 884, + 'referencedDeclaration': 919, 'src': '1154:8:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_SafeMath_$884', + 'typeIdentifier': 't_contract$_SafeMath_$919', 'typeString': 'library SafeMath' } }, @@ -632,10 +677,10 @@ let compiledSubscription1 = { { 'constant': false, 'id': 69, - 'name': 'author', + 'name': 'owner', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1212:29:1', + 'scope': 710, + 'src': '1212:28:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -659,10 +704,36 @@ let compiledSubscription1 = { { 'constant': false, 'id': 71, + 'name': 'contractVersion', + 'nodeType': 'VariableDeclaration', + 'scope': 710, + 'src': '1246:28:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + }, + 'typeName': { + 'id': 70, + 'name': 'uint8', + 'nodeType': 'ElementaryTypeName', + 'src': '1246:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 73, 'name': 'relayer', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1288:22:1', + 'scope': 710, + 'src': '1321:22:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -670,10 +741,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 70, + 'id': 72, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '1288:7:1', + 'src': '1321:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -685,11 +756,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 73, + 'id': 75, 'name': 'requiredToAddress', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1470:32:1', + 'scope': 710, + 'src': '1503:32:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -697,10 +768,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 72, + 'id': 74, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '1470:7:1', + 'src': '1503:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -712,11 +783,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 75, + 'id': 77, 'name': 'requiredTokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1508:35:1', + 'scope': 710, + 'src': '1541:35:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -724,10 +795,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 74, + 'id': 76, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '1508:7:1', + 'src': '1541:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -739,11 +810,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 77, + 'id': 79, 'name': 'requiredTokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1549:34:1', + 'scope': 710, + 'src': '1582:34:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -751,10 +822,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 76, + 'id': 78, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1549:7:1', + 'src': '1582:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -765,11 +836,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 79, + 'id': 81, 'name': 'requiredPeriodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1589:36:1', + 'scope': 710, + 'src': '1622:36:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -777,10 +848,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 78, + 'id': 80, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1589:7:1', + 'src': '1622:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -791,11 +862,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 81, + 'id': 83, 'name': 'requiredGasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1631:31:1', + 'scope': 710, + 'src': '1664:31:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -803,10 +874,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 80, + 'id': 82, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1631:7:1', + 'src': '1664:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -817,11 +888,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 85, + 'id': 87, 'name': 'nextValidTimestamp', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1854:53:1', + 'scope': 710, + 'src': '1887:53:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -829,28 +900,28 @@ let compiledSubscription1 = { 'typeString': 'mapping(bytes32 => uint256)' }, 'typeName': { - 'id': 84, + 'id': 86, 'keyType': { - 'id': 82, + 'id': 84, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '1862:7:1', + 'src': '1895:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'Mapping', - 'src': '1854:27:1', + 'src': '1887:27:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' }, 'valueType': { - 'id': 83, + 'id': 85, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1873:7:1', + 'src': '1906:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -862,11 +933,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 89, + 'id': 91, 'name': 'extraNonce', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '2088:45:1', + 'scope': 710, + 'src': '2121:45:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -874,28 +945,28 @@ let compiledSubscription1 = { 'typeString': 'mapping(address => uint256)' }, 'typeName': { - 'id': 88, + 'id': 90, 'keyType': { - 'id': 86, + 'id': 88, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2096:7:1', + 'src': '2129:7:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, 'nodeType': 'Mapping', - 'src': '2088:27:1', + 'src': '2121:27:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', 'typeString': 'mapping(address => uint256)' }, 'valueType': { - 'id': 87, + 'id': 89, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2107:7:1', + 'src': '2140:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -908,21 +979,21 @@ let compiledSubscription1 = { { 'anonymous': false, 'documentation': null, - 'id': 105, + 'id': 107, 'name': 'ExecuteSubscription', 'nodeType': 'EventDefinition', 'parameters': { - 'id': 104, + 'id': 106, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 91, + 'id': 93, 'indexed': true, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2175:20:1', + 'scope': 107, + 'src': '2208:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -930,10 +1001,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 90, + 'id': 92, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2175:7:1', + 'src': '2208:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -945,12 +1016,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 93, + 'id': 95, 'indexed': true, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2222:18:1', + 'scope': 107, + 'src': '2255:18:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -958,10 +1029,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 92, + 'id': 94, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2222:7:1', + 'src': '2255:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -973,12 +1044,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 95, + 'id': 97, 'indexed': false, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2266:20:1', + 'scope': 107, + 'src': '2299:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -986,10 +1057,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 94, + 'id': 96, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2266:7:1', + 'src': '2299:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -1001,12 +1072,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 97, + 'id': 99, 'indexed': false, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2338:19:1', + 'scope': 107, + 'src': '2371:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1014,10 +1085,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 96, + 'id': 98, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2338:7:1', + 'src': '2371:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1028,12 +1099,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 99, + 'id': 101, 'indexed': false, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2408:21:1', + 'scope': 107, + 'src': '2441:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1041,10 +1112,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 98, + 'id': 100, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2408:7:1', + 'src': '2441:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1055,12 +1126,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 101, + 'id': 103, 'indexed': false, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2480:16:1', + 'scope': 107, + 'src': '2513:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1068,10 +1139,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 100, + 'id': 102, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2480:7:1', + 'src': '2513:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1082,12 +1153,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 103, + 'id': 105, 'indexed': false, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2557:13:1', + 'scope': 107, + 'src': '2590:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1095,10 +1166,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 102, + 'id': 104, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2557:7:1', + 'src': '2590:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1108,28 +1179,28 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '2165:471:1' + 'src': '2198:471:1' }, - 'src': '2140:497:1' + 'src': '2173:497:1' }, { 'anonymous': false, 'documentation': null, - 'id': 121, + 'id': 123, 'name': 'CancelSubscription', 'nodeType': 'EventDefinition', 'parameters': { - 'id': 120, + 'id': 122, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 107, + 'id': 109, 'indexed': true, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2677:20:1', + 'scope': 123, + 'src': '2710:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1137,10 +1208,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 106, + 'id': 108, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2677:7:1', + 'src': '2710:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -1152,12 +1223,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 109, + 'id': 111, 'indexed': true, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2724:18:1', + 'scope': 123, + 'src': '2757:18:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1165,10 +1236,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 108, + 'id': 110, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2724:7:1', + 'src': '2757:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -1180,12 +1251,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 111, + 'id': 113, 'indexed': false, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2768:20:1', + 'scope': 123, + 'src': '2801:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1193,10 +1264,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 110, + 'id': 112, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2768:7:1', + 'src': '2801:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -1208,12 +1279,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 113, + 'id': 115, 'indexed': false, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2840:19:1', + 'scope': 123, + 'src': '2873:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1221,10 +1292,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 112, + 'id': 114, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2840:7:1', + 'src': '2873:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1235,12 +1306,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 115, + 'id': 117, 'indexed': false, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2910:21:1', + 'scope': 123, + 'src': '2943:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1248,10 +1319,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 114, + 'id': 116, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2910:7:1', + 'src': '2943:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1262,12 +1333,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 117, + 'id': 119, 'indexed': false, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2982:16:1', + 'scope': 123, + 'src': '3015:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1275,10 +1346,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 116, + 'id': 118, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2982:7:1', + 'src': '3015:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1289,12 +1360,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 119, + 'id': 121, 'indexed': false, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '3059:13:1', + 'scope': 123, + 'src': '3092:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1302,10 +1373,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 118, + 'id': 120, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3059:7:1', + 'src': '3092:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1315,32 +1386,103 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '2667:471:1' + 'src': '2700:471:1' + }, + 'src': '2676:496:1' + }, + { + 'anonymous': false, + 'documentation': null, + 'id': 129, + 'name': 'ownershipChanged', + 'nodeType': 'EventDefinition', + 'parameters': { + 'id': 128, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 125, + 'indexed': false, + 'name': 'oldOwner', + 'nodeType': 'VariableDeclaration', + 'scope': 129, + 'src': '3210:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 124, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3210:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 127, + 'indexed': false, + 'name': 'newOwner', + 'nodeType': 'VariableDeclaration', + 'scope': 129, + 'src': '3236:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 126, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3236:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3200:58:1' }, - 'src': '2643:496:1' + 'src': '3178:81:1' }, { 'body': { - 'id': 167, + 'id': 179, 'nodeType': 'Block', - 'src': '3368:266:1', + 'src': '3488:292:1', 'statements': [ { 'expression': { 'argumentTypes': null, - 'id': 140, + 'id': 148, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 138, + 'id': 146, 'name': 'requiredToAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 73, - 'src': '3378:17:1', + 'referencedDeclaration': 75, + 'src': '3498:17:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -1350,43 +1492,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 139, + 'id': 147, 'name': '_toAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 123, - 'src': '3396:10:1', + 'referencedDeclaration': 131, + 'src': '3516:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '3378:28:1', + 'src': '3498:28:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'id': 141, + 'id': 149, 'nodeType': 'ExpressionStatement', - 'src': '3378:28:1' + 'src': '3498:28:1' }, { 'expression': { 'argumentTypes': null, - 'id': 144, + 'id': 152, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 142, + 'id': 150, 'name': 'requiredTokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 75, - 'src': '3416:20:1', + 'referencedDeclaration': 77, + 'src': '3536:20:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -1396,43 +1538,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 143, + 'id': 151, 'name': '_tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 125, - 'src': '3437:13:1', + 'referencedDeclaration': 133, + 'src': '3557:13:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '3416:34:1', + 'src': '3536:34:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'id': 145, + 'id': 153, 'nodeType': 'ExpressionStatement', - 'src': '3416:34:1' + 'src': '3536:34:1' }, { 'expression': { 'argumentTypes': null, - 'id': 148, + 'id': 156, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 146, + 'id': 154, 'name': 'requiredTokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 77, - 'src': '3460:19:1', + 'referencedDeclaration': 79, + 'src': '3580:19:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1442,43 +1584,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 147, + 'id': 155, 'name': '_tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 127, - 'src': '3480:12:1', + 'referencedDeclaration': 135, + 'src': '3600:12:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '3460:32:1', + 'src': '3580:32:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 149, + 'id': 157, 'nodeType': 'ExpressionStatement', - 'src': '3460:32:1' + 'src': '3580:32:1' }, { 'expression': { 'argumentTypes': null, - 'id': 152, + 'id': 160, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 150, + 'id': 158, 'name': 'requiredPeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 79, - 'src': '3502:21:1', + 'referencedDeclaration': 81, + 'src': '3622:21:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1488,43 +1630,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 151, + 'id': 159, 'name': '_periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 129, - 'src': '3524:14:1', + 'referencedDeclaration': 137, + 'src': '3644:14:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '3502:36:1', + 'src': '3622:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 153, + 'id': 161, 'nodeType': 'ExpressionStatement', - 'src': '3502:36:1' + 'src': '3622:36:1' }, { 'expression': { 'argumentTypes': null, - 'id': 156, + 'id': 164, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 154, + 'id': 162, 'name': 'requiredGasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 81, - 'src': '3548:16:1', + 'referencedDeclaration': 83, + 'src': '3668:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1534,43 +1676,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 155, + 'id': 163, 'name': '_gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 131, - 'src': '3565:9:1', + 'referencedDeclaration': 139, + 'src': '3685:9:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '3548:26:1', + 'src': '3668:26:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 157, + 'id': 165, 'nodeType': 'ExpressionStatement', - 'src': '3548:26:1' + 'src': '3668:26:1' }, { 'expression': { 'argumentTypes': null, - 'id': 161, + 'id': 169, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 158, - 'name': 'author', + 'id': 166, + 'name': 'owner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], 'referencedDeclaration': 69, - 'src': '3584:6:1', + 'src': '3704:5:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -1582,18 +1724,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 159, + 'id': 167, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '3591:3:1', + 'referencedDeclaration': 1386, + 'src': '3710:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 160, + 'id': 168, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -1601,38 +1743,38 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '3591:10:1', + 'src': '3710:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '3584:17:1', + 'src': '3704:16:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'id': 162, + 'id': 170, 'nodeType': 'ExpressionStatement', - 'src': '3584:17:1' + 'src': '3704:16:1' }, { 'expression': { 'argumentTypes': null, - 'id': 165, + 'id': 173, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 163, + 'id': 171, 'name': 'relayer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 71, - 'src': '3611:7:1', + 'referencedDeclaration': 73, + 'src': '3730:7:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -1642,47 +1784,98 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 164, + 'id': 172, 'name': '_relayer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 135, - 'src': '3619:8:1', + 'referencedDeclaration': 143, + 'src': '3738:8:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '3611:16:1', + 'src': '3730:16:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'id': 166, + 'id': 174, 'nodeType': 'ExpressionStatement', - 'src': '3611:16:1' - } - ] - }, - 'documentation': null, - 'id': 168, - 'implemented': true, - 'kind': 'constructor', - 'modifiers': [], - 'name': '', - 'nodeType': 'FunctionDefinition', - 'parameters': { - 'id': 136, - 'nodeType': 'ParameterList', - 'parameters': [ + 'src': '3730:16:1' + }, { - 'constant': false, - 'id': 123, - 'name': '_toAddress', + 'expression': { + 'argumentTypes': null, + 'id': 177, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 175, + 'name': 'contractVersion', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 71, + 'src': '3756:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'hexValue': '31', + 'id': 176, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '3772:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_1_by_1', + 'typeString': 'int_const 1' + }, + 'value': '1' + }, + 'src': '3756:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'id': 178, + 'nodeType': 'ExpressionStatement', + 'src': '3756:17:1' + } + ] + }, + 'documentation': null, + 'id': 180, + 'implemented': true, + 'kind': 'constructor', + 'modifiers': [], + 'name': '', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 144, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 131, + 'name': '_toAddress', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3166:18:1', + 'scope': 180, + 'src': '3286:18:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1690,10 +1883,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 122, + 'id': 130, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '3166:7:1', + 'src': '3286:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -1705,11 +1898,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 125, + 'id': 133, 'name': '_tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3194:21:1', + 'scope': 180, + 'src': '3314:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1717,10 +1910,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 124, + 'id': 132, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '3194:7:1', + 'src': '3314:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -1732,11 +1925,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 127, + 'id': 135, 'name': '_tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3225:20:1', + 'scope': 180, + 'src': '3345:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1744,10 +1937,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 126, + 'id': 134, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3225:7:1', + 'src': '3345:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1758,11 +1951,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 129, + 'id': 137, 'name': '_periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3255:22:1', + 'scope': 180, + 'src': '3375:22:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1770,10 +1963,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 128, + 'id': 136, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3255:7:1', + 'src': '3375:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1784,11 +1977,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 131, + 'id': 139, 'name': '_gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3287:17:1', + 'scope': 180, + 'src': '3407:17:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1796,10 +1989,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 130, + 'id': 138, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3287:7:1', + 'src': '3407:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1810,11 +2003,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 133, + 'id': 141, 'name': '_version', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3314:14:1', + 'scope': 180, + 'src': '3434:14:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1822,10 +2015,10 @@ let compiledSubscription1 = { 'typeString': 'uint8' }, 'typeName': { - 'id': 132, + 'id': 140, 'name': 'uint8', 'nodeType': 'ElementaryTypeName', - 'src': '3314:5:1', + 'src': '3434:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint8', 'typeString': 'uint8' @@ -1836,11 +2029,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 135, + 'id': 143, 'name': '_relayer', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3338:16:1', + 'scope': 180, + 'src': '3458:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -1848,10 +2041,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 134, + 'id': 142, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '3338:7:1', + 'src': '3458:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -1862,25 +2055,324 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '3156:204:1' + 'src': '3276:204:1' }, 'returnParameters': { - 'id': 137, + 'id': 145, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '3368:0:1' + 'src': '3488:0:1' }, - 'scope': 675, - 'src': '3145:489:1', + 'scope': 710, + 'src': '3265:515:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 200, + 'id': 202, 'nodeType': 'Block', - 'src': '4037:227:1', + 'src': '3855:114:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + 'id': 189, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 186, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1386, + 'src': '3871:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 187, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '3871:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 188, + 'name': 'owner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3883:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '3871:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + ], + 'id': 185, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1389, + 1390 + ], + 'referencedDeclaration': 1389, + 'src': '3863:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', + 'typeString': 'function (bool) pure' + } + }, + 'id': 190, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '3863:26:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 191, + 'nodeType': 'ExpressionStatement', + 'src': '3863:26:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 194, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 192, + 'name': 'owner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3897:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 193, + 'name': '_newOwner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 182, + 'src': '3905:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '3897:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'id': 195, + 'nodeType': 'ExpressionStatement', + 'src': '3897:17:1' + }, + { + 'eventCall': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 197, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1386, + 'src': '3944:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 198, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '3944:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + { + 'argumentTypes': null, + 'id': 199, + 'name': 'owner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3956:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + ], + 'id': 196, + 'name': 'ownershipChanged', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 129, + 'src': '3927:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$returns$__$', + 'typeString': 'function (address,address)' + } + }, + 'id': 200, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '3927:35:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 201, + 'nodeType': 'EmitStatement', + 'src': '3922:40:1' + } + ] + }, + 'documentation': null, + 'id': 203, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'changeOwnership', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 183, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 182, + 'name': '_newOwner', + 'nodeType': 'VariableDeclaration', + 'scope': 203, + 'src': '3811:25:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + 'typeName': { + 'id': 181, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3811:15:1', + 'stateMutability': 'payable', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3810:27:1' + }, + 'returnParameters': { + 'id': 184, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '3855:0:1' + }, + 'scope': 710, + 'src': '3786:183:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 235, + 'nodeType': 'Block', + 'src': '4372:227:1', 'statements': [ { 'condition': { @@ -1889,7 +2381,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 184, + 'id': 219, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -1898,26 +2390,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 177, + 'id': 212, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '4050:18:1', + 'referencedDeclaration': 87, + 'src': '4385:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 179, + 'id': 214, 'indexExpression': { 'argumentTypes': null, - 'id': 178, + 'id': 213, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 170, - 'src': '4069:16:1', + 'referencedDeclaration': 205, + 'src': '4404:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -1928,7 +2420,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '4050:36:1', + 'src': '4385:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -1941,7 +2433,7 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 182, + 'id': 217, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -1949,18 +2441,18 @@ let compiledSubscription1 = { 'nodeType': 'UnaryOperation', 'operator': '-', 'prefix': true, - 'src': '4096:2:1', + 'src': '4431:2:1', 'subExpression': { 'argumentTypes': null, 'hexValue': '31', - 'id': 181, + 'id': 216, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '4097:1:1', + 'src': '4432:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_1_by_1', @@ -1981,20 +2473,20 @@ let compiledSubscription1 = { 'typeString': 'int_const -1' } ], - 'id': 180, + 'id': 215, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '4088:7:1', + 'src': '4423:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_uint256_$', 'typeString': 'type(uint256)' }, 'typeName': 'uint256' }, - 'id': 183, + 'id': 218, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -2002,39 +2494,39 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '4088:11:1', + 'src': '4423:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '4050:49:1', + 'src': '4385:49:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, 'falseBody': null, - 'id': 188, + 'id': 223, 'nodeType': 'IfStatement', - 'src': '4047:88:1', + 'src': '4382:88:1', 'trueBody': { - 'id': 187, + 'id': 222, 'nodeType': 'Block', - 'src': '4100:35:1', + 'src': '4435:35:1', 'statements': [ { 'expression': { 'argumentTypes': null, 'hexValue': '66616c7365', - 'id': 185, + 'id': 220, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'bool', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '4119:5:1', + 'src': '4454:5:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_bool', @@ -2042,10 +2534,10 @@ let compiledSubscription1 = { }, 'value': 'false' }, - 'functionReturnParameters': 176, - 'id': 186, + 'functionReturnParameters': 211, + 'id': 221, 'nodeType': 'Return', - 'src': '4112:12:1' + 'src': '4447:12:1' } ] } @@ -2060,7 +2552,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 197, + 'id': 232, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2069,18 +2561,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 189, + 'id': 224, 'name': 'block', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1341, - 'src': '4152:5:1', + 'referencedDeclaration': 1376, + 'src': '4487:5:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_block', 'typeString': 'block' } }, - 'id': 190, + 'id': 225, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2088,7 +2580,7 @@ let compiledSubscription1 = { 'memberName': 'timestamp', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '4152:15:1', + 'src': '4487:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -2101,12 +2593,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 195, + 'id': 230, 'name': 'gracePeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 172, - 'src': '4228:18:1', + 'referencedDeclaration': 207, + 'src': '4563:18:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -2124,26 +2616,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 191, + 'id': 226, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '4187:18:1', + 'referencedDeclaration': 87, + 'src': '4522:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 193, + 'id': 228, 'indexExpression': { 'argumentTypes': null, - 'id': 192, + 'id': 227, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 170, - 'src': '4206:16:1', + 'referencedDeclaration': 205, + 'src': '4541:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -2154,27 +2646,27 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '4187:36:1', + 'src': '4522:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 194, + 'id': 229, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '4187:40:1', + 'referencedDeclaration': 898, + 'src': '4522:40:1', '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': 196, + 'id': 231, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2182,57 +2674,57 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '4187:60:1', + 'src': '4522:60:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '4152:95:1', + 'src': '4487:95:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } } ], - 'id': 198, + 'id': 233, 'isConstant': false, 'isInlineArray': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'nodeType': 'TupleExpression', - 'src': '4151:106:1', + 'src': '4486:106:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'functionReturnParameters': 176, - 'id': 199, + 'functionReturnParameters': 211, + 'id': 234, 'nodeType': 'Return', - 'src': '4144:113:1' + 'src': '4479:113:1' } ] }, 'documentation': null, - 'id': 201, + 'id': 236, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'isSubscriptionActive', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 173, + 'id': 208, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 170, + 'id': 205, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 201, - 'src': '3913:24:1', + 'scope': 236, + 'src': '4248:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -2240,10 +2732,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 169, + 'id': 204, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '3913:7:1', + 'src': '4248:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -2254,11 +2746,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 172, + 'id': 207, 'name': 'gracePeriodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 201, - 'src': '3947:26:1', + 'scope': 236, + 'src': '4282:26:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -2266,10 +2758,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 171, + 'id': 206, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3947:7:1', + 'src': '4282:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -2279,19 +2771,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '3903:76:1' + 'src': '4238:76:1' }, 'returnParameters': { - 'id': 176, + 'id': 211, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 175, + 'id': 210, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 201, - 'src': '4027:4:1', + 'scope': 236, + 'src': '4362:4:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -2299,10 +2791,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 174, + 'id': 209, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '4027:4:1', + 'src': '4362:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -2312,19 +2804,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '4026:6:1' + 'src': '4361:6:1' }, - 'scope': 675, - 'src': '3874:390:1', + 'scope': 710, + 'src': '4209:390:1', 'stateMutability': 'view', 'superFunction': null, 'visibility': 'external' }, { 'body': { - 'id': 300, + 'id': 335, 'nodeType': 'Block', - 'src': '4969:999:1', + 'src': '5304:999:1', 'statements': [ { 'expression': { @@ -2336,7 +2828,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 229, + 'id': 264, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2347,19 +2839,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 225, + 'id': 260, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 221, + 'id': 256, 'name': 'requiredToAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 73, - 'src': '5093:17:1', + 'referencedDeclaration': 75, + 'src': '5428:17:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -2373,14 +2865,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30', - 'id': 223, + 'id': 258, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5122:1:1', + 'src': '5457:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -2396,20 +2888,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 0' } ], - 'id': 222, + 'id': 257, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5114:7:1', + 'src': '5449:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 224, + 'id': 259, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -2417,13 +2909,13 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5114:10:1', + 'src': '5449:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '5093:31:1', + 'src': '5428:31:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -2437,19 +2929,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 228, + 'id': 263, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 226, + 'id': 261, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 205, - 'src': '5128:2:1', + 'referencedDeclaration': 240, + 'src': '5463:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -2459,24 +2951,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 227, + 'id': 262, 'name': 'requiredToAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 73, - 'src': '5134:17:1', + 'referencedDeclaration': 75, + 'src': '5469:17:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '5128:23:1', + 'src': '5463:23:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5093:58:1', + 'src': '5428:58:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -2485,14 +2977,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564546f41646472657373204661696c757265', - 'id': 230, + 'id': 265, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5153:27:1', + 'src': '5488:27:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430', @@ -2512,21 +3004,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredToAddress Failure\'' } ], - 'id': 220, + 'id': 255, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5084:7:1', + 'referencedDeclaration': 1390, + 'src': '5419:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 231, + 'id': 266, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2534,15 +3026,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5084:98:1', + 'src': '5419:98:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 232, + 'id': 267, 'nodeType': 'ExpressionStatement', - 'src': '5084:98:1' + 'src': '5419:98:1' }, { 'expression': { @@ -2554,7 +3046,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 242, + 'id': 277, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2565,19 +3057,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 238, + 'id': 273, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 234, + 'id': 269, 'name': 'requiredTokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 75, - 'src': '5201:20:1', + 'referencedDeclaration': 77, + 'src': '5536:20:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -2591,14 +3083,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30', - 'id': 236, + 'id': 271, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5233:1:1', + 'src': '5568:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -2614,20 +3106,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 0' } ], - 'id': 235, + 'id': 270, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5225:7:1', + 'src': '5560:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 237, + 'id': 272, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -2635,13 +3127,13 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5225:10:1', + 'src': '5560:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '5201:34:1', + 'src': '5536:34:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -2655,19 +3147,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 241, + 'id': 276, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 239, + 'id': 274, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 207, - 'src': '5239:12:1', + 'referencedDeclaration': 242, + 'src': '5574:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -2677,24 +3169,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 240, + 'id': 275, 'name': 'requiredTokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 75, - 'src': '5255:20:1', + 'referencedDeclaration': 77, + 'src': '5590:20:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '5239:36:1', + 'src': '5574:36:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5201:74:1', + 'src': '5536:74:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -2703,14 +3195,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564546f6b656e41646472657373204661696c757265', - 'id': 243, + 'id': 278, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5277:30:1', + 'src': '5612:30:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c', @@ -2730,21 +3222,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredTokenAddress Failure\'' } ], - 'id': 233, + 'id': 268, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5192:7:1', + 'referencedDeclaration': 1390, + 'src': '5527:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 244, + 'id': 279, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2752,15 +3244,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5192:118:1', + 'src': '5527:118:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 245, + 'id': 280, 'nodeType': 'ExpressionStatement', - 'src': '5192:118:1' + 'src': '5527:118:1' }, { 'expression': { @@ -2772,7 +3264,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 253, + 'id': 288, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2783,19 +3275,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 249, + 'id': 284, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 247, + 'id': 282, 'name': 'requiredTokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 77, - 'src': '5329:19:1', + 'referencedDeclaration': 79, + 'src': '5664:19:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -2806,14 +3298,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 248, + 'id': 283, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5352:1:1', + 'src': '5687:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -2821,7 +3313,7 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '5329:24:1', + 'src': '5664:24:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -2835,19 +3327,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 252, + 'id': 287, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 250, + 'id': 285, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 209, - 'src': '5357:11:1', + 'referencedDeclaration': 244, + 'src': '5692:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -2857,24 +3349,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 251, + 'id': 286, 'name': 'requiredTokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 77, - 'src': '5372:19:1', + 'referencedDeclaration': 79, + 'src': '5707:19:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '5357:34:1', + 'src': '5692:34:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5329:62:1', + 'src': '5664:62:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -2883,14 +3375,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564546f6b656e416d6f756e74204661696c757265', - 'id': 254, + 'id': 289, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5393:29:1', + 'src': '5728:29:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785', @@ -2910,21 +3402,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredTokenAmount Failure\'' } ], - 'id': 246, + 'id': 281, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5320:7:1', + 'referencedDeclaration': 1390, + 'src': '5655:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 255, + 'id': 290, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2932,15 +3424,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5320:105:1', + 'src': '5655:105:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 256, + 'id': 291, 'nodeType': 'ExpressionStatement', - 'src': '5320:105:1' + 'src': '5655:105:1' }, { 'expression': { @@ -2952,7 +3444,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 264, + 'id': 299, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -2963,19 +3455,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 260, + 'id': 295, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 258, + 'id': 293, 'name': 'requiredPeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 79, - 'src': '5444:21:1', + 'referencedDeclaration': 81, + 'src': '5779:21:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -2986,14 +3478,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 259, + 'id': 294, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5469:1:1', + 'src': '5804:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -3001,7 +3493,7 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '5444:26:1', + 'src': '5779:26:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -3015,19 +3507,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 263, + 'id': 298, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 261, + 'id': 296, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 211, - 'src': '5474:13:1', + 'referencedDeclaration': 246, + 'src': '5809:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3037,24 +3529,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 262, + 'id': 297, 'name': 'requiredPeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 79, - 'src': '5491:21:1', + 'referencedDeclaration': 81, + 'src': '5826:21:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '5474:38:1', + 'src': '5809:38:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5444:68:1', + 'src': '5779:68:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -3063,14 +3555,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564506572696f645365636f6e6473204661696c757265', - 'id': 265, + 'id': 300, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5514:31:1', + 'src': '5849:31:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b', @@ -3090,21 +3582,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredPeriodSeconds Failure\'' } ], - 'id': 257, + 'id': 292, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5435:7:1', + 'referencedDeclaration': 1390, + 'src': '5770:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 266, + 'id': 301, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -3112,15 +3604,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5435:113:1', + 'src': '5770:113:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 267, + 'id': 302, 'nodeType': 'ExpressionStatement', - 'src': '5435:113:1' + 'src': '5770:113:1' }, { 'expression': { @@ -3132,7 +3624,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 275, + 'id': 310, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -3143,19 +3635,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 271, + 'id': 306, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 269, + 'id': 304, 'name': 'requiredGasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 81, - 'src': '5567:16:1', + 'referencedDeclaration': 83, + 'src': '5902:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3166,14 +3658,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 270, + 'id': 305, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5587:1:1', + 'src': '5922:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -3181,7 +3673,7 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '5567:21:1', + 'src': '5902:21:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -3195,19 +3687,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 274, + 'id': 309, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 272, + 'id': 307, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 213, - 'src': '5592:8:1', + 'referencedDeclaration': 248, + 'src': '5927:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3217,24 +3709,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 273, + 'id': 308, 'name': 'requiredGasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 81, - 'src': '5604:16:1', + 'referencedDeclaration': 83, + 'src': '5939:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '5592:28:1', + 'src': '5927:28:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5567:53:1', + 'src': '5902:53:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -3243,14 +3735,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '72657175697265644761735072696365204661696c757265', - 'id': 276, + 'id': 311, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5622:26:1', + 'src': '5957:26:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb', @@ -3270,21 +3762,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredGasPrice Failure\'' } ], - 'id': 268, + 'id': 303, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5558:7:1', + 'referencedDeclaration': 1390, + 'src': '5893:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 277, + 'id': 312, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -3292,15 +3784,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5558:93:1', + 'src': '5893:93:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 278, + 'id': 313, 'nodeType': 'ExpressionStatement', - 'src': '5558:93:1' + 'src': '5893:93:1' }, { 'expression': { @@ -3315,14 +3807,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30783139', - 'id': 283, + 'id': 318, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5731:4:1', + 'src': '6066:4:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_25_by_1', @@ -3338,20 +3830,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 25' } ], - 'id': 282, + 'id': 317, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5726:4:1', + 'src': '6061:4:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_bytes1_$', 'typeString': 'type(bytes1)' }, 'typeName': 'byte' }, - 'id': 284, + 'id': 319, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -3359,7 +3851,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5726:10:1', + 'src': '6061:10:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes1', 'typeString': 'bytes1' @@ -3371,14 +3863,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30', - 'id': 286, + 'id': 321, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5759:1:1', + 'src': '6094:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -3394,20 +3886,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 0' } ], - 'id': 285, + 'id': 320, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5754:4:1', + 'src': '6089:4:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_bytes1_$', 'typeString': 'type(bytes1)' }, 'typeName': 'byte' }, - 'id': 287, + 'id': 322, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -3415,7 +3907,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5754:7:1', + 'src': '6089:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes1', 'typeString': 'bytes1' @@ -3426,14 +3918,14 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 289, + 'id': 324, 'name': 'this', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1374, - 'src': '5787:4:1', + 'referencedDeclaration': 1409, + 'src': '6122:4:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } } @@ -3441,24 +3933,24 @@ let compiledSubscription1 = { 'expression': { 'argumentTypes': [ { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } ], - 'id': 288, + 'id': 323, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5779:7:1', + 'src': '6114:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 290, + 'id': 325, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -3466,7 +3958,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5779:13:1', + 'src': '6114:13:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -3474,12 +3966,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 291, + 'id': 326, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 203, - 'src': '5810:4:1', + 'referencedDeclaration': 238, + 'src': '6145:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -3487,12 +3979,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 292, + 'id': 327, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 205, - 'src': '5832:2:1', + 'referencedDeclaration': 240, + 'src': '6167:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -3500,12 +3992,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 293, + 'id': 328, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 207, - 'src': '5852:12:1', + 'referencedDeclaration': 242, + 'src': '6187:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -3513,12 +4005,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 294, + 'id': 329, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 209, - 'src': '5882:11:1', + 'referencedDeclaration': 244, + 'src': '6217:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3526,12 +4018,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 295, + 'id': 330, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 211, - 'src': '5911:13:1', + 'referencedDeclaration': 246, + 'src': '6246:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3539,12 +4031,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 296, + 'id': 331, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 213, - 'src': '5942:8:1', + 'referencedDeclaration': 248, + 'src': '6277:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3592,18 +4084,18 @@ let compiledSubscription1 = { ], 'expression': { 'argumentTypes': null, - 'id': 280, + 'id': 315, 'name': 'abi', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1338, - 'src': '5692:3:1', + 'referencedDeclaration': 1373, + 'src': '6027:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_abi', 'typeString': 'abi' } }, - 'id': 281, + 'id': 316, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -3611,13 +4103,13 @@ let compiledSubscription1 = { 'memberName': 'encodePacked', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '5692:16:1', + 'src': '6027:16:1', 'typeDescriptions': { 'typeIdentifier': 't_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$', 'typeString': 'function () pure returns (bytes memory)' } }, - 'id': 297, + 'id': 332, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -3625,7 +4117,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5692:268:1', + 'src': '6027:268:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -3639,18 +4131,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 279, + 'id': 314, 'name': 'keccak256', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1345, - 'src': '5669:9:1', + 'referencedDeclaration': 1380, + 'src': '6004:9:1', 'typeDescriptions': { 'typeIdentifier': 't_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$', 'typeString': 'function (bytes memory) pure returns (bytes32)' } }, - 'id': 298, + 'id': 333, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -3658,37 +4150,37 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5669:292:1', + 'src': '6004:292:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, - 'functionReturnParameters': 219, - 'id': 299, + 'functionReturnParameters': 254, + 'id': 334, 'nodeType': 'Return', - 'src': '5662:299:1' + 'src': '5997:299:1' } ] }, 'documentation': null, - 'id': 301, + 'id': 336, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'getSubscriptionHash', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 216, + 'id': 251, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 203, + 'id': 238, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4458:12:1', + 'scope': 336, + 'src': '4793:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3696,10 +4188,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 202, + 'id': 237, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '4458:7:1', + 'src': '4793:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -3711,11 +4203,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 205, + 'id': 240, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4497:10:1', + 'scope': 336, + 'src': '4832:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3723,10 +4215,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 204, + 'id': 239, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '4497:7:1', + 'src': '4832:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -3738,11 +4230,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 207, + 'id': 242, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4533:20:1', + 'scope': 336, + 'src': '4868:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3750,10 +4242,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 206, + 'id': 241, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '4533:7:1', + 'src': '4868:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -3765,11 +4257,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 209, + 'id': 244, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4605:19:1', + 'scope': 336, + 'src': '4940:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3777,10 +4269,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 208, + 'id': 243, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4605:7:1', + 'src': '4940:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3791,11 +4283,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 211, + 'id': 246, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4675:21:1', + 'scope': 336, + 'src': '5010:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3803,10 +4295,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 210, + 'id': 245, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4675:7:1', + 'src': '5010:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3817,11 +4309,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 213, + 'id': 248, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4747:16:1', + 'scope': 336, + 'src': '5082:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3829,10 +4321,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 212, + 'id': 247, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4747:7:1', + 'src': '5082:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3843,11 +4335,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 215, + 'id': 250, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4831:13:1', + 'scope': 336, + 'src': '5166:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3855,10 +4347,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 214, + 'id': 249, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4831:7:1', + 'src': '5166:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -3868,19 +4360,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '4448:462:1' + 'src': '4783:462:1' }, 'returnParameters': { - 'id': 219, + 'id': 254, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 218, + 'id': 253, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4956:7:1', + 'scope': 336, + 'src': '5291:7:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -3888,10 +4380,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 217, + 'id': 252, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '4956:7:1', + 'src': '5291:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -3901,19 +4393,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '4955:9:1' + 'src': '5290:9:1' }, - 'scope': 675, - 'src': '4420:1548:1', + 'scope': 710, + 'src': '4755:1548:1', 'stateMutability': 'view', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 317, + 'id': 352, 'nodeType': 'Block', - 'src': '6263:84:1', + 'src': '6598:84:1', 'statements': [ { 'expression': { @@ -3921,12 +4413,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 314, + 'id': 349, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 305, - 'src': '6330:9:1', + 'referencedDeclaration': 340, + 'src': '6665:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -3947,32 +4439,32 @@ let compiledSubscription1 = { 'argumentTypes': [], 'expression': { 'argumentTypes': null, - 'id': 310, + 'id': 345, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 303, - 'src': '6280:16:1', + 'referencedDeclaration': 338, + 'src': '6615:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, - 'id': 311, + 'id': 346, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'toEthSignedMessageHash', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 755, - 'src': '6280:39:1', + 'referencedDeclaration': 790, + 'src': '6615:39:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$', 'typeString': 'function (bytes32) pure returns (bytes32)' } }, - 'id': 312, + 'id': 347, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -3980,27 +4472,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '6280:41:1', + 'src': '6615:41:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, - 'id': 313, + 'id': 348, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'recover', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 739, - 'src': '6280:49:1', + 'referencedDeclaration': 774, + 'src': '6615:49:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$', 'typeString': 'function (bytes32,bytes memory) pure returns (address)' } }, - 'id': 315, + 'id': 350, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4008,37 +4500,37 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '6280:60:1', + 'src': '6615:60:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'functionReturnParameters': 309, - 'id': 316, + 'functionReturnParameters': 344, + 'id': 351, 'nodeType': 'Return', - 'src': '6273:67:1' + 'src': '6608:67:1' } ] }, 'documentation': null, - 'id': 318, + 'id': 353, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'getSubscriptionSigner', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 306, + 'id': 341, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 303, + 'id': 338, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 318, - 'src': '6069:24:1', + 'scope': 353, + 'src': '6404:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -4046,10 +4538,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 302, + 'id': 337, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '6069:7:1', + 'src': '6404:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -4060,11 +4552,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 305, + 'id': 340, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 318, - 'src': '6126:22:1', + 'scope': 353, + 'src': '6461:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -4072,10 +4564,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 304, + 'id': 339, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '6126:5:1', + 'src': '6461:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -4085,19 +4577,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '6059:145:1' + 'src': '6394:145:1' }, 'returnParameters': { - 'id': 309, + 'id': 344, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 308, + 'id': 343, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 318, - 'src': '6250:7:1', + 'scope': 353, + 'src': '6585:7:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -4105,10 +4597,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 307, + 'id': 342, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6250:7:1', + 'src': '6585:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -4119,32 +4611,32 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '6249:9:1' + 'src': '6584:9:1' }, - 'scope': 675, - 'src': '6029:318:1', + 'scope': 710, + 'src': '6364:318:1', 'stateMutability': 'pure', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 409, + 'id': 444, 'nodeType': 'Block', - 'src': '7098:633:1', + 'src': '7433:633:1', 'statements': [ { 'assignments': [ - 340 + 375 ], 'declarations': [ { 'constant': false, - 'id': 340, + 'id': 375, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7108:24:1', + 'scope': 444, + 'src': '7443:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -4152,10 +4644,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 339, + 'id': 374, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '7108:7:1', + 'src': '7443:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -4165,18 +4657,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 350, + 'id': 385, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 342, + 'id': 377, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7168:4:1', + 'referencedDeclaration': 355, + 'src': '7503:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4184,12 +4676,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 343, + 'id': 378, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 322, - 'src': '7174:2:1', + 'referencedDeclaration': 357, + 'src': '7509:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4197,12 +4689,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 344, + 'id': 379, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 324, - 'src': '7178:12:1', + 'referencedDeclaration': 359, + 'src': '7513:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4210,12 +4702,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 345, + 'id': 380, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 326, - 'src': '7192:11:1', + 'referencedDeclaration': 361, + 'src': '7527:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -4223,12 +4715,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 346, + 'id': 381, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 328, - 'src': '7205:13:1', + 'referencedDeclaration': 363, + 'src': '7540:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -4236,12 +4728,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 347, + 'id': 382, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 330, - 'src': '7220:8:1', + 'referencedDeclaration': 365, + 'src': '7555:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -4249,12 +4741,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 348, + 'id': 383, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 332, - 'src': '7230:5:1', + 'referencedDeclaration': 367, + 'src': '7565:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -4292,18 +4784,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 341, + 'id': 376, 'name': 'getSubscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 301, - 'src': '7135:19:1', + 'referencedDeclaration': 336, + 'src': '7470:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' } }, - 'id': 349, + 'id': 384, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4311,27 +4803,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7135:110:1', + 'src': '7470:110:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7108:137:1' + 'src': '7443:137:1' }, { 'assignments': [ - 352 + 387 ], 'declarations': [ { 'constant': false, - 'id': 352, + 'id': 387, 'name': 'signer', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7255:14:1', + 'scope': 444, + 'src': '7590:14:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -4339,10 +4831,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 351, + 'id': 386, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '7255:7:1', + 'src': '7590:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -4353,18 +4845,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 357, + 'id': 392, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 354, + 'id': 389, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 340, - 'src': '7294:16:1', + 'referencedDeclaration': 375, + 'src': '7629:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -4372,12 +4864,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 355, + 'id': 390, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 334, - 'src': '7312:9:1', + 'referencedDeclaration': 369, + 'src': '7647:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -4395,18 +4887,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 353, + 'id': 388, 'name': 'getSubscriptionSigner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 318, - 'src': '7272:21:1', + 'referencedDeclaration': 353, + 'src': '7607:21:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', 'typeString': 'function (bytes32,bytes memory) pure returns (address)' } }, - 'id': 356, + 'id': 391, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4414,27 +4906,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7272:50:1', + 'src': '7607:50:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7255:67:1' + 'src': '7590:67:1' }, { 'assignments': [ - 359 + 394 ], 'declarations': [ { 'constant': false, - 'id': 359, + 'id': 394, 'name': 'allowance', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7332:17:1', + 'scope': 444, + 'src': '7667:17:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -4442,10 +4934,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 358, + 'id': 393, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '7332:7:1', + 'src': '7667:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -4455,18 +4947,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 369, + 'id': 404, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 364, + 'id': 399, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7382:4:1', + 'referencedDeclaration': 355, + 'src': '7717:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4477,14 +4969,14 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 366, + 'id': 401, 'name': 'this', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1374, - 'src': '7396:4:1', + 'referencedDeclaration': 1409, + 'src': '7731:4:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } } @@ -4492,24 +4984,24 @@ let compiledSubscription1 = { 'expression': { 'argumentTypes': [ { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } ], - 'id': 365, + 'id': 400, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '7388:7:1', + 'src': '7723:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 367, + 'id': 402, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4517,7 +5009,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7388:13:1', + 'src': '7723:13:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -4540,12 +5032,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 361, + 'id': 396, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 324, - 'src': '7358:12:1', + 'referencedDeclaration': 359, + 'src': '7693:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4559,18 +5051,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 360, + 'id': 395, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '7352:5:1', + 'referencedDeclaration': 1302, + 'src': '7687:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 362, + 'id': 397, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4578,27 +5070,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7352:19:1', + 'src': '7687:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 363, + 'id': 398, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'allowance', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 941, - 'src': '7352:29:1', + 'referencedDeclaration': 976, + 'src': '7687:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address,address) view external returns (uint256)' } }, - 'id': 368, + 'id': 403, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4606,27 +5098,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7352:50:1', + 'src': '7687:50:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7332:70:1' + 'src': '7667:70:1' }, { 'assignments': [ - 371 + 406 ], 'declarations': [ { 'constant': false, - 'id': 371, + 'id': 406, 'name': 'balance', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7412:15:1', + 'scope': 444, + 'src': '7747:15:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -4634,10 +5126,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 370, + 'id': 405, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '7412:7:1', + 'src': '7747:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -4647,18 +5139,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 378, + 'id': 413, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 376, + 'id': 411, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7460:4:1', + 'referencedDeclaration': 355, + 'src': '7795:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4677,12 +5169,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 373, + 'id': 408, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 324, - 'src': '7436:12:1', + 'referencedDeclaration': 359, + 'src': '7771:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4696,18 +5188,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 372, + 'id': 407, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '7430:5:1', + 'referencedDeclaration': 1302, + 'src': '7765:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 374, + 'id': 409, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4715,27 +5207,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7430:19:1', + 'src': '7765:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 375, + 'id': 410, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'balanceOf', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 925, - 'src': '7430:29:1', + 'referencedDeclaration': 960, + 'src': '7765:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address) view external returns (uint256)' } }, - 'id': 377, + 'id': 412, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4743,14 +5235,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7430:35:1', + 'src': '7765:35:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7412:53:1' + 'src': '7747:53:1' }, { 'expression': { @@ -4762,7 +5254,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 406, + 'id': 441, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4773,7 +5265,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 399, + 'id': 434, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4784,7 +5276,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 392, + 'id': 427, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4795,7 +5287,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 385, + 'id': 420, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4806,19 +5298,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 381, + 'id': 416, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 379, + 'id': 414, 'name': 'signer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 352, - 'src': '7497:6:1', + 'referencedDeclaration': 387, + 'src': '7832:6:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4828,18 +5320,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 380, + 'id': 415, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7507:4:1', + 'referencedDeclaration': 355, + 'src': '7842:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '7497:14:1', + 'src': '7832:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -4853,19 +5345,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 384, + 'id': 419, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 382, + 'id': 417, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7527:4:1', + 'referencedDeclaration': 355, + 'src': '7862:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -4875,24 +5367,24 @@ let compiledSubscription1 = { 'operator': '!=', 'rightExpression': { 'argumentTypes': null, - 'id': 383, + 'id': 418, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 322, - 'src': '7535:2:1', + 'referencedDeclaration': 357, + 'src': '7870:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '7527:10:1', + 'src': '7862:10:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:40:1', + 'src': '7832:40:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -4906,7 +5398,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 391, + 'id': 426, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4915,18 +5407,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 386, + 'id': 421, 'name': 'block', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1341, - 'src': '7553:5:1', + 'referencedDeclaration': 1376, + 'src': '7888:5:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_block', 'typeString': 'block' } }, - 'id': 387, + 'id': 422, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -4934,7 +5426,7 @@ let compiledSubscription1 = { 'memberName': 'timestamp', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '7553:15:1', + 'src': '7888:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -4946,26 +5438,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 388, + 'id': 423, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '7572:18:1', + 'referencedDeclaration': 87, + 'src': '7907:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 390, + 'id': 425, 'indexExpression': { 'argumentTypes': null, - 'id': 389, + 'id': 424, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 340, - 'src': '7591:16:1', + 'referencedDeclaration': 375, + 'src': '7926:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -4976,19 +5468,19 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '7572:36:1', + 'src': '7907:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '7553:55:1', + 'src': '7888:55:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:111:1', + 'src': '7832:111:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -5002,19 +5494,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 398, + 'id': 433, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 393, + 'id': 428, 'name': 'allowance', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 359, - 'src': '7624:9:1', + 'referencedDeclaration': 394, + 'src': '7959:9:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5027,12 +5519,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 396, + 'id': 431, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 330, - 'src': '7653:8:1', + 'referencedDeclaration': 365, + 'src': '7988:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5048,32 +5540,32 @@ let compiledSubscription1 = { ], 'expression': { 'argumentTypes': null, - 'id': 394, + 'id': 429, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 326, - 'src': '7637:11:1', + 'referencedDeclaration': 361, + 'src': '7972:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 395, + 'id': 430, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '7637:15:1', + 'referencedDeclaration': 898, + 'src': '7972:15:1', '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': 397, + 'id': 432, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -5081,19 +5573,19 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7637:25:1', + 'src': '7972:25:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '7624:38:1', + 'src': '7959:38:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:165:1', + 'src': '7832:165:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -5107,19 +5599,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 405, + 'id': 440, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 400, + 'id': 435, 'name': 'balance', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 371, - 'src': '7678:7:1', + 'referencedDeclaration': 406, + 'src': '8013:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5132,12 +5624,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 403, + 'id': 438, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 330, - 'src': '7705:8:1', + 'referencedDeclaration': 365, + 'src': '8040:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5153,32 +5645,32 @@ let compiledSubscription1 = { ], 'expression': { 'argumentTypes': null, - 'id': 401, + 'id': 436, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 326, - 'src': '7689:11:1', + 'referencedDeclaration': 361, + 'src': '8024:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 402, + 'id': 437, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '7689:15:1', + 'referencedDeclaration': 898, + 'src': '8024:15:1', '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': 404, + 'id': 439, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -5186,63 +5678,63 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7689:25:1', + 'src': '8024:25:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '7678:36:1', + 'src': '8013:36:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:217:1', + 'src': '7832:217:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } } ], - 'id': 407, + 'id': 442, 'isConstant': false, 'isInlineArray': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'nodeType': 'TupleExpression', - 'src': '7483:241:1', + 'src': '7818:241:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'functionReturnParameters': 338, - 'id': 408, + 'functionReturnParameters': 373, + 'id': 443, 'nodeType': 'Return', - 'src': '7476:248:1' + 'src': '7811:248:1' } ] }, 'documentation': null, - 'id': 410, + 'id': 445, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'isSubscriptionReady', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 335, + 'id': 370, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 320, + 'id': 355, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6508:12:1', + 'scope': 445, + 'src': '6843:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5250,10 +5742,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 319, + 'id': 354, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6508:7:1', + 'src': '6843:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -5265,11 +5757,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 322, + 'id': 357, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6547:10:1', + 'scope': 445, + 'src': '6882:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5277,10 +5769,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 321, + 'id': 356, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6547:7:1', + 'src': '6882:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -5292,11 +5784,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 324, + 'id': 359, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6583:20:1', + 'scope': 445, + 'src': '6918:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5304,10 +5796,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 323, + 'id': 358, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6583:7:1', + 'src': '6918:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -5319,11 +5811,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 326, + 'id': 361, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6655:19:1', + 'scope': 445, + 'src': '6990:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5331,10 +5823,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 325, + 'id': 360, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6655:7:1', + 'src': '6990:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5345,11 +5837,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 328, + 'id': 363, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6725:21:1', + 'scope': 445, + 'src': '7060:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5357,10 +5849,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 327, + 'id': 362, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6725:7:1', + 'src': '7060:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5371,11 +5863,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 330, + 'id': 365, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6797:16:1', + 'scope': 445, + 'src': '7132:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5383,10 +5875,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 329, + 'id': 364, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6797:7:1', + 'src': '7132:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5397,11 +5889,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 332, + 'id': 367, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6882:13:1', + 'scope': 445, + 'src': '7217:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5409,10 +5901,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 331, + 'id': 366, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6882:7:1', + 'src': '7217:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5423,11 +5915,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 334, + 'id': 369, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6964:22:1', + 'scope': 445, + 'src': '7299:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -5435,10 +5927,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 333, + 'id': 368, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '6964:5:1', + 'src': '7299:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -5448,19 +5940,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '6498:544:1' + 'src': '6833:544:1' }, 'returnParameters': { - 'id': 338, + 'id': 373, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 337, + 'id': 372, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '7088:4:1', + 'scope': 445, + 'src': '7423:4:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5468,10 +5960,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 336, + 'id': 371, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '7088:4:1', + 'src': '7423:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -5481,32 +5973,32 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '7087:6:1' + 'src': '7422:6:1' }, - 'scope': 675, - 'src': '6470:1261:1', + 'scope': 710, + 'src': '6805:1261:1', 'stateMutability': 'view', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 486, + 'id': 521, 'nodeType': 'Block', - 'src': '8606:802:1', + 'src': '8941:802:1', 'statements': [ { 'assignments': [ - 432 + 467 ], 'declarations': [ { 'constant': false, - 'id': 432, + 'id': 467, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 486, - 'src': '8616:24:1', + 'scope': 521, + 'src': '8951:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5514,10 +6006,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 431, + 'id': 466, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '8616:7:1', + 'src': '8951:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -5527,18 +6019,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 442, + 'id': 477, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 434, + 'id': 469, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '8676:4:1', + 'referencedDeclaration': 447, + 'src': '9011:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -5546,12 +6038,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 435, + 'id': 470, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 414, - 'src': '8682:2:1', + 'referencedDeclaration': 449, + 'src': '9017:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -5559,12 +6051,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 436, + 'id': 471, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 416, - 'src': '8686:12:1', + 'referencedDeclaration': 451, + 'src': '9021:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -5572,12 +6064,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 437, + 'id': 472, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 418, - 'src': '8700:11:1', + 'referencedDeclaration': 453, + 'src': '9035:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5585,12 +6077,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 438, + 'id': 473, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 420, - 'src': '8713:13:1', + 'referencedDeclaration': 455, + 'src': '9048:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5598,12 +6090,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 439, + 'id': 474, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 422, - 'src': '8728:8:1', + 'referencedDeclaration': 457, + 'src': '9063:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5611,12 +6103,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 440, + 'id': 475, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 424, - 'src': '8738:5:1', + 'referencedDeclaration': 459, + 'src': '9073:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -5654,18 +6146,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 433, + 'id': 468, 'name': 'getSubscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 301, - 'src': '8643:19:1', + 'referencedDeclaration': 336, + 'src': '8978:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' } }, - 'id': 441, + 'id': 476, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -5673,27 +6165,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '8643:110:1', + 'src': '8978:110:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '8616:137:1' + 'src': '8951:137:1' }, { 'assignments': [ - 444 + 479 ], 'declarations': [ { 'constant': false, - 'id': 444, + 'id': 479, 'name': 'signer', 'nodeType': 'VariableDeclaration', - 'scope': 486, - 'src': '8763:14:1', + 'scope': 521, + 'src': '9098:14:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -5701,10 +6193,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 443, + 'id': 478, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8763:7:1', + 'src': '9098:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -5715,18 +6207,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 449, + 'id': 484, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 446, + 'id': 481, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 432, - 'src': '8802:16:1', + 'referencedDeclaration': 467, + 'src': '9137:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -5734,12 +6226,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 447, + 'id': 482, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 426, - 'src': '8820:9:1', + 'referencedDeclaration': 461, + 'src': '9155:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -5757,18 +6249,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 445, + 'id': 480, 'name': 'getSubscriptionSigner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 318, - 'src': '8780:21:1', + 'referencedDeclaration': 353, + 'src': '9115:21:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', 'typeString': 'function (bytes32,bytes memory) pure returns (address)' } }, - 'id': 448, + 'id': 483, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -5776,14 +6268,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '8780:50:1', + 'src': '9115:50:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '8763:67:1' + 'src': '9098:67:1' }, { 'expression': { @@ -5795,19 +6287,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 453, + 'id': 488, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 451, + 'id': 486, 'name': 'signer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 444, - 'src': '8887:6:1', + 'referencedDeclaration': 479, + 'src': '9222:6:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -5817,18 +6309,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 452, + 'id': 487, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '8897:4:1', + 'referencedDeclaration': 447, + 'src': '9232:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '8887:14:1', + 'src': '9222:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -5837,14 +6329,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e', - 'id': 454, + 'id': 489, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '8903:49:1', + 'src': '9238:49:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b', @@ -5864,21 +6356,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Invalid Signature for subscription cancellation\'' } ], - 'id': 450, + 'id': 485, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '8879:7:1', + 'referencedDeclaration': 1390, + 'src': '9214:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 455, + 'id': 490, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -5886,15 +6378,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '8879:74:1', + 'src': '9214:74:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 456, + 'id': 491, 'nodeType': 'ExpressionStatement', - 'src': '8879:74:1' + 'src': '9214:74:1' }, { 'expression': { @@ -5906,19 +6398,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 461, + 'id': 496, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 458, + 'id': 493, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '9012:4:1', + 'referencedDeclaration': 447, + 'src': '9347:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -5930,18 +6422,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 459, + 'id': 494, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '9020:3:1', + 'referencedDeclaration': 1386, + 'src': '9355:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 460, + 'id': 495, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -5949,13 +6441,13 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '9020:10:1', + 'src': '9355:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '9012:18:1', + 'src': '9347:18:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -5964,14 +6456,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '6d73672e73656e646572206973206e6f74207468652073756273637269626572', - 'id': 462, + 'id': 497, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '9032:34:1', + 'src': '9367:34:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79', @@ -5991,21 +6483,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'msg.sender is not the subscriber\'' } ], - 'id': 457, + 'id': 492, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '9004:7:1', + 'referencedDeclaration': 1390, + 'src': '9339:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 463, + 'id': 498, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -6013,20 +6505,20 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '9004:63:1', + 'src': '9339:63:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 464, + 'id': 499, 'nodeType': 'ExpressionStatement', - 'src': '9004:63:1' + 'src': '9339:63:1' }, { 'expression': { 'argumentTypes': null, - 'id': 472, + 'id': 507, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -6035,26 +6527,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 465, + 'id': 500, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '9206:18:1', + 'referencedDeclaration': 87, + 'src': '9541:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 467, + 'id': 502, 'indexExpression': { 'argumentTypes': null, - 'id': 466, + 'id': 501, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 432, - 'src': '9225:16:1', + 'referencedDeclaration': 467, + 'src': '9560:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -6065,7 +6557,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': true, 'nodeType': 'IndexAccess', - 'src': '9206:36:1', + 'src': '9541:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6078,7 +6570,7 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 470, + 'id': 505, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -6086,18 +6578,18 @@ let compiledSubscription1 = { 'nodeType': 'UnaryOperation', 'operator': '-', 'prefix': true, - 'src': '9251:2:1', + 'src': '9586:2:1', 'subExpression': { 'argumentTypes': null, 'hexValue': '31', - 'id': 469, + 'id': 504, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '9252:1:1', + 'src': '9587:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_1_by_1', @@ -6118,20 +6610,20 @@ let compiledSubscription1 = { 'typeString': 'int_const -1' } ], - 'id': 468, + 'id': 503, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '9243:7:1', + 'src': '9578:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_uint256_$', 'typeString': 'type(uint256)' }, 'typeName': 'uint256' }, - 'id': 471, + 'id': 506, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -6139,21 +6631,21 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '9243:11:1', + 'src': '9578:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '9206:48:1', + 'src': '9541:48:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 473, + 'id': 508, 'nodeType': 'ExpressionStatement', - 'src': '9206:48:1' + 'src': '9541:48:1' }, { 'eventCall': { @@ -6161,12 +6653,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 475, + 'id': 510, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '9302:4:1', + 'referencedDeclaration': 447, + 'src': '9637:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6174,12 +6666,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 476, + 'id': 511, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 414, - 'src': '9308:2:1', + 'referencedDeclaration': 449, + 'src': '9643:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6187,12 +6679,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 477, + 'id': 512, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 416, - 'src': '9312:12:1', + 'referencedDeclaration': 451, + 'src': '9647:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6200,12 +6692,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 478, + 'id': 513, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 418, - 'src': '9326:11:1', + 'referencedDeclaration': 453, + 'src': '9661:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6213,12 +6705,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 479, + 'id': 514, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 420, - 'src': '9339:13:1', + 'referencedDeclaration': 455, + 'src': '9674:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6226,12 +6718,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 480, + 'id': 515, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 422, - 'src': '9354:8:1', + 'referencedDeclaration': 457, + 'src': '9689:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6239,12 +6731,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 481, + 'id': 516, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 424, - 'src': '9364:5:1', + 'referencedDeclaration': 459, + 'src': '9699:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6282,18 +6774,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 474, + 'id': 509, 'name': 'CancelSubscription', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 121, - 'src': '9270:18:1', + 'referencedDeclaration': 123, + 'src': '9605:18:1', 'typeDescriptions': { 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' } }, - 'id': 482, + 'id': 517, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -6301,28 +6793,28 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '9270:109:1', + 'src': '9605:109:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 483, + 'id': 518, 'nodeType': 'EmitStatement', - 'src': '9265:114:1' + 'src': '9600:114:1' }, { 'expression': { 'argumentTypes': null, 'hexValue': '74727565', - 'id': 484, + 'id': 519, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'bool', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '9397:4:1', + 'src': '9732:4:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_bool', @@ -6330,31 +6822,31 @@ let compiledSubscription1 = { }, 'value': 'true' }, - 'functionReturnParameters': 430, - 'id': 485, + 'functionReturnParameters': 465, + 'id': 520, 'nodeType': 'Return', - 'src': '9390:11:1' + 'src': '9725:11:1' } ] }, 'documentation': null, - 'id': 487, + 'id': 522, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'cancelSubscription', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 427, + 'id': 462, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 412, + 'id': 447, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8022:12:1', + 'scope': 522, + 'src': '8357:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6362,10 +6854,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 411, + 'id': 446, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8022:7:1', + 'src': '8357:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -6377,11 +6869,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 414, + 'id': 449, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8061:10:1', + 'scope': 522, + 'src': '8396:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6389,10 +6881,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 413, + 'id': 448, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8061:7:1', + 'src': '8396:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -6404,11 +6896,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 416, + 'id': 451, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8097:20:1', + 'scope': 522, + 'src': '8432:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6416,10 +6908,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 415, + 'id': 450, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8097:7:1', + 'src': '8432:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -6431,11 +6923,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 418, + 'id': 453, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8169:19:1', + 'scope': 522, + 'src': '8504:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6443,10 +6935,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 417, + 'id': 452, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8169:7:1', + 'src': '8504:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6457,11 +6949,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 420, + 'id': 455, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8239:21:1', + 'scope': 522, + 'src': '8574:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6469,10 +6961,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 419, + 'id': 454, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8239:7:1', + 'src': '8574:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6483,11 +6975,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 422, + 'id': 457, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8311:16:1', + 'scope': 522, + 'src': '8646:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6495,10 +6987,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 421, + 'id': 456, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8311:7:1', + 'src': '8646:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6509,11 +7001,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 424, + 'id': 459, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8395:13:1', + 'scope': 522, + 'src': '8730:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6521,10 +7013,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 423, + 'id': 458, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8395:7:1', + 'src': '8730:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6535,11 +7027,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 426, + 'id': 461, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8477:22:1', + 'scope': 522, + 'src': '8812:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -6547,10 +7039,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 425, + 'id': 460, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '8477:5:1', + 'src': '8812:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -6560,19 +7052,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '8012:543:1' + 'src': '8347:543:1' }, 'returnParameters': { - 'id': 430, + 'id': 465, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 429, + 'id': 464, 'name': 'success', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8588:12:1', + 'scope': 522, + 'src': '8923:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6580,10 +7072,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 428, + 'id': 463, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '8588:4:1', + 'src': '8923:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -6593,19 +7085,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '8587:14:1' + 'src': '8922:14:1' }, - 'scope': 675, - 'src': '7985:1423:1', + 'scope': 710, + 'src': '8320:1423:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 636, + 'id': 671, 'nodeType': 'Block', - 'src': '10189:2468:1', + 'src': '10524:2468:1', 'statements': [ { 'expression': { @@ -6617,7 +7109,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 512, + 'id': 547, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -6626,18 +7118,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 509, + 'id': 544, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '10207:3:1', + 'referencedDeclaration': 1386, + 'src': '10542:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 510, + 'id': 545, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -6645,7 +7137,7 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '10207:10:1', + 'src': '10542:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -6655,18 +7147,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 511, + 'id': 546, 'name': 'relayer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 71, - 'src': '10221:7:1', + 'referencedDeclaration': 73, + 'src': '10556:7:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '10207:21:1', + 'src': '10542:21:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -6680,21 +7172,21 @@ let compiledSubscription1 = { 'typeString': 'bool' } ], - 'id': 508, + 'id': 543, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1354, - 'src': '10199:7:1', + 'referencedDeclaration': 1389, + 'src': '10534:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', 'typeString': 'function (bool) pure' } }, - 'id': 513, + 'id': 548, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -6702,28 +7194,28 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10199:30:1', + 'src': '10534:30:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 514, + 'id': 549, 'nodeType': 'ExpressionStatement', - 'src': '10199:30:1' + 'src': '10534:30:1' }, { 'assignments': [ - 516 + 551 ], 'declarations': [ { 'constant': false, - 'id': 516, + 'id': 551, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 636, - 'src': '10239:24:1', + 'scope': 671, + 'src': '10574:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -6731,10 +7223,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 515, + 'id': 550, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '10239:7:1', + 'src': '10574:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -6744,18 +7236,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 526, + 'id': 561, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 518, + 'id': 553, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10299:4:1', + 'referencedDeclaration': 524, + 'src': '10634:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6763,12 +7255,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 519, + 'id': 554, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '10305:2:1', + 'referencedDeclaration': 526, + 'src': '10640:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6776,12 +7268,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 520, + 'id': 555, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '10309:12:1', + 'referencedDeclaration': 528, + 'src': '10644:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6789,12 +7281,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 521, + 'id': 556, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '10323:11:1', + 'referencedDeclaration': 530, + 'src': '10658:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6802,12 +7294,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 522, + 'id': 557, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '10336:13:1', + 'referencedDeclaration': 532, + 'src': '10671:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6815,12 +7307,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 523, + 'id': 558, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '10351:8:1', + 'referencedDeclaration': 534, + 'src': '10686:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6828,12 +7320,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 524, + 'id': 559, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10361:5:1', + 'referencedDeclaration': 536, + 'src': '10696:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6871,18 +7363,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 517, + 'id': 552, 'name': 'getSubscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 301, - 'src': '10266:19:1', + 'referencedDeclaration': 336, + 'src': '10601:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' } }, - 'id': 525, + 'id': 560, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -6890,14 +7382,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10266:110:1', + 'src': '10601:110:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '10239:137:1' + 'src': '10574:137:1' }, { 'expression': { @@ -6908,12 +7400,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 529, + 'id': 564, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10473:4:1', + 'referencedDeclaration': 524, + 'src': '10808:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6921,12 +7413,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 530, + 'id': 565, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '10479:2:1', + 'referencedDeclaration': 526, + 'src': '10814:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6934,12 +7426,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 531, + 'id': 566, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '10483:12:1', + 'referencedDeclaration': 528, + 'src': '10818:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -6947,12 +7439,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 532, + 'id': 567, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '10497:11:1', + 'referencedDeclaration': 530, + 'src': '10832:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6960,12 +7452,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 533, + 'id': 568, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '10510:13:1', + 'referencedDeclaration': 532, + 'src': '10845:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6973,12 +7465,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 534, + 'id': 569, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '10525:8:1', + 'referencedDeclaration': 534, + 'src': '10860:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6986,12 +7478,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 535, + 'id': 570, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10535:5:1', + 'referencedDeclaration': 536, + 'src': '10870:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -6999,12 +7491,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 536, + 'id': 571, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 503, - 'src': '10542:9:1', + 'referencedDeclaration': 538, + 'src': '10877:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -7046,18 +7538,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 528, + 'id': 563, 'name': 'isSubscriptionReady', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 410, - 'src': '10453:19:1', + 'referencedDeclaration': 445, + 'src': '10788:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)' } }, - 'id': 537, + 'id': 572, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7065,7 +7557,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10453:99:1', + 'src': '10788:99:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -7074,14 +7566,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574', - 'id': 538, + 'id': 573, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '10554:67:1', + 'src': '10889:67:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3', @@ -7101,21 +7593,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Subscription is not ready or conditions of transction are not met\'' } ], - 'id': 527, + 'id': 562, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '10444:7:1', + 'referencedDeclaration': 1390, + 'src': '10779:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 539, + 'id': 574, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7123,20 +7615,20 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10444:179:1', + 'src': '10779:179:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 540, + 'id': 575, 'nodeType': 'ExpressionStatement', - 'src': '10444:179:1' + 'src': '10779:179:1' }, { 'expression': { 'argumentTypes': null, - 'id': 549, + 'id': 584, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7145,26 +7637,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 541, + 'id': 576, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '10713:18:1', + 'referencedDeclaration': 87, + 'src': '11048:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 543, + 'id': 578, 'indexExpression': { 'argumentTypes': null, - 'id': 542, + 'id': 577, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 516, - 'src': '10732:16:1', + 'referencedDeclaration': 551, + 'src': '11067:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -7175,7 +7667,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': true, 'nodeType': 'IndexAccess', - 'src': '10713:36:1', + 'src': '11048:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7188,12 +7680,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 547, + 'id': 582, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '10772:13:1', + 'referencedDeclaration': 532, + 'src': '11107:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7211,18 +7703,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 544, + 'id': 579, 'name': 'block', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1341, - 'src': '10752:5:1', + 'referencedDeclaration': 1376, + 'src': '11087:5:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_block', 'typeString': 'block' } }, - 'id': 545, + 'id': 580, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7230,27 +7722,27 @@ let compiledSubscription1 = { 'memberName': 'timestamp', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '10752:15:1', + 'src': '11087:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 546, + 'id': 581, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '10752:19:1', + 'referencedDeclaration': 898, + 'src': '11087:19:1', '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': 548, + 'id': 583, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7258,21 +7750,21 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10752:34:1', + 'src': '11087:34:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '10713:73:1', + 'src': '11048:73:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 550, + 'id': 585, 'nodeType': 'ExpressionStatement', - 'src': '10713:73:1' + 'src': '11048:73:1' }, { 'condition': { @@ -7281,19 +7773,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 555, + 'id': 590, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 551, + 'id': 586, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10905:5:1', + 'referencedDeclaration': 536, + 'src': '11240:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7305,26 +7797,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 552, + 'id': 587, 'name': 'extraNonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 89, - 'src': '10913:10:1', + 'referencedDeclaration': 91, + 'src': '11248:10:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', 'typeString': 'mapping(address => uint256)' } }, - 'id': 554, + 'id': 589, 'indexExpression': { 'argumentTypes': null, - 'id': 553, + 'id': 588, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10924:4:1', + 'referencedDeclaration': 524, + 'src': '11259:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7335,31 +7827,31 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '10913:16:1', + 'src': '11248:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '10905:24:1', + 'src': '11240:24:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, 'falseBody': null, - 'id': 563, + 'id': 598, 'nodeType': 'IfStatement', - 'src': '10902:75:1', + 'src': '11237:75:1', 'trueBody': { - 'id': 562, + 'id': 597, 'nodeType': 'Block', - 'src': '10930:47:1', + 'src': '11265:47:1', 'statements': [ { 'expression': { 'argumentTypes': null, - 'id': 560, + 'id': 595, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7368,26 +7860,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 556, + 'id': 591, 'name': 'extraNonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 89, - 'src': '10942:10:1', + 'referencedDeclaration': 91, + 'src': '11277:10:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', 'typeString': 'mapping(address => uint256)' } }, - 'id': 558, + 'id': 593, 'indexExpression': { 'argumentTypes': null, - 'id': 557, + 'id': 592, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10953:4:1', + 'referencedDeclaration': 524, + 'src': '11288:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7398,7 +7890,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': true, 'nodeType': 'IndexAccess', - 'src': '10942:16:1', + 'src': '11277:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7408,42 +7900,42 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 559, + 'id': 594, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10961:5:1', + 'referencedDeclaration': 536, + 'src': '11296:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '10942:24:1', + 'src': '11277:24:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 561, + 'id': 596, 'nodeType': 'ExpressionStatement', - 'src': '10942:24:1' + 'src': '11277:24:1' } ] } }, { 'assignments': [ - 565 + 600 ], 'declarations': [ { 'constant': false, - 'id': 565, + 'id': 600, 'name': 'startingBalance', 'nodeType': 'VariableDeclaration', - 'scope': 636, - 'src': '11062:23:1', + 'scope': 671, + 'src': '11397:23:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -7451,10 +7943,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 564, + 'id': 599, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '11062:7:1', + 'src': '11397:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7464,18 +7956,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 572, + 'id': 607, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 570, + 'id': 605, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11118:2:1', + 'referencedDeclaration': 526, + 'src': '11453:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7494,12 +7986,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 567, + 'id': 602, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11094:12:1', + 'referencedDeclaration': 528, + 'src': '11429:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7513,18 +8005,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 566, + 'id': 601, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '11088:5:1', + 'referencedDeclaration': 1302, + 'src': '11423:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 568, + 'id': 603, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7532,27 +8024,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11088:19:1', + 'src': '11423:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 569, + 'id': 604, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'balanceOf', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 925, - 'src': '11088:29:1', + 'referencedDeclaration': 960, + 'src': '11423:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address) view external returns (uint256)' } }, - 'id': 571, + 'id': 606, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7560,14 +8052,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11088:33:1', + 'src': '11423:33:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '11062:59:1' + 'src': '11397:59:1' }, { 'expression': { @@ -7575,12 +8067,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 577, + 'id': 612, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '11164:4:1', + 'referencedDeclaration': 524, + 'src': '11499:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7588,12 +8080,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 578, + 'id': 613, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11169:2:1', + 'referencedDeclaration': 526, + 'src': '11504:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7601,12 +8093,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 579, + 'id': 614, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '11172:11:1', + 'referencedDeclaration': 530, + 'src': '11507:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7633,12 +8125,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 574, + 'id': 609, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11137:12:1', + 'referencedDeclaration': 528, + 'src': '11472:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7652,18 +8144,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 573, + 'id': 608, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '11131:5:1', + 'referencedDeclaration': 1302, + 'src': '11466:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 575, + 'id': 610, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7671,27 +8163,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11131:19:1', + 'src': '11466:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 576, + 'id': 611, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'transferFrom', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 1014, - 'src': '11131:32:1', + 'referencedDeclaration': 1049, + 'src': '11466:32:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', 'typeString': 'function (address,address,uint256) external returns (bool)' } }, - 'id': 580, + 'id': 615, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7699,15 +8191,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11131:53:1', + 'src': '11466:53:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'id': 581, + 'id': 616, 'nodeType': 'ExpressionStatement', - 'src': '11131:53:1' + 'src': '11466:53:1' }, { 'expression': { @@ -7719,7 +8211,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 593, + 'id': 628, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7733,19 +8225,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 585, + 'id': 620, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 583, + 'id': 618, 'name': 'startingBalance', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 565, - 'src': '11214:15:1', + 'referencedDeclaration': 600, + 'src': '11549:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7755,32 +8247,32 @@ let compiledSubscription1 = { 'operator': '+', 'rightExpression': { 'argumentTypes': null, - 'id': 584, + 'id': 619, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '11230:11:1', + 'referencedDeclaration': 530, + 'src': '11565:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '11214:27:1', + 'src': '11549:27:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } } ], - 'id': 586, + 'id': 621, 'isConstant': false, 'isInlineArray': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'nodeType': 'TupleExpression', - 'src': '11213:29:1', + 'src': '11548:29:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -7793,12 +8285,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 591, + 'id': 626, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11276:2:1', + 'referencedDeclaration': 526, + 'src': '11611:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7817,12 +8309,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 588, + 'id': 623, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11252:12:1', + 'referencedDeclaration': 528, + 'src': '11587:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -7836,18 +8328,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 587, + 'id': 622, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '11246:5:1', + 'referencedDeclaration': 1302, + 'src': '11581:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 589, + 'id': 624, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7855,27 +8347,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11246:19:1', + 'src': '11581:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 590, + 'id': 625, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'balanceOf', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 925, - 'src': '11246:29:1', + 'referencedDeclaration': 960, + 'src': '11581:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address) view external returns (uint256)' } }, - 'id': 592, + 'id': 627, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7883,13 +8375,13 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11246:33:1', + 'src': '11581:33:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '11213:66:1', + 'src': '11548:66:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -7898,14 +8390,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79', - 'id': 594, + 'id': 629, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '11291:40:1', + 'src': '11626:40:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7', @@ -7925,21 +8417,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'ERC20 Balance did not change correctly\'' } ], - 'id': 582, + 'id': 617, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '11194:7:1', + 'referencedDeclaration': 1390, + 'src': '11529:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 595, + 'id': 630, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7947,15 +8439,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11194:147:1', + 'src': '11529:147:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 596, + 'id': 631, 'nodeType': 'ExpressionStatement', - 'src': '11194:147:1' + 'src': '11529:147:1' }, { 'expression': { @@ -7966,18 +8458,18 @@ let compiledSubscription1 = { 'arguments': [], 'expression': { 'argumentTypes': [], - 'id': 598, + 'id': 633, 'name': 'checkSuccess', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 652, - 'src': '11371:12:1', + 'referencedDeclaration': 687, + 'src': '11706:12:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', 'typeString': 'function () pure returns (bool)' } }, - 'id': 599, + 'id': 634, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -7985,7 +8477,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11371:14:1', + 'src': '11706:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -7994,14 +8486,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564', - 'id': 600, + 'id': 635, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '11397:55:1', + 'src': '11732:55:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28', @@ -8021,21 +8513,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Subscription::executeSubscription TransferFrom failed\'' } ], - 'id': 597, + 'id': 632, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '11352:7:1', + 'referencedDeclaration': 1390, + 'src': '11687:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 601, + 'id': 636, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -8043,15 +8535,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11352:112:1', + 'src': '11687:112:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 602, + 'id': 637, 'nodeType': 'ExpressionStatement', - 'src': '11352:112:1' + 'src': '11687:112:1' }, { 'eventCall': { @@ -8059,12 +8551,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 604, + 'id': 639, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '11514:4:1', + 'referencedDeclaration': 524, + 'src': '11849:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -8072,12 +8564,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 605, + 'id': 640, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11520:2:1', + 'referencedDeclaration': 526, + 'src': '11855:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -8085,12 +8577,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 606, + 'id': 641, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11524:12:1', + 'referencedDeclaration': 528, + 'src': '11859:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -8098,12 +8590,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 607, + 'id': 642, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '11538:11:1', + 'referencedDeclaration': 530, + 'src': '11873:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8111,12 +8603,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 608, + 'id': 643, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '11551:13:1', + 'referencedDeclaration': 532, + 'src': '11886:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8124,12 +8616,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 609, + 'id': 644, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '11566:8:1', + 'referencedDeclaration': 534, + 'src': '11901:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8137,12 +8629,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 610, + 'id': 645, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '11576:5:1', + 'referencedDeclaration': 536, + 'src': '11911:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8180,18 +8672,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 603, + 'id': 638, 'name': 'ExecuteSubscription', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 105, - 'src': '11481:19:1', + 'referencedDeclaration': 107, + 'src': '11816:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' } }, - 'id': 611, + 'id': 646, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -8199,15 +8691,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11481:110:1', + 'src': '11816:110:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 612, + 'id': 647, 'nodeType': 'EmitStatement', - 'src': '11476:115:1' + 'src': '11811:115:1' }, { 'condition': { @@ -8216,19 +8708,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 615, + 'id': 650, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 613, + 'id': 648, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '11811:8:1', + 'referencedDeclaration': 534, + 'src': '12146:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8239,14 +8731,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 614, + 'id': 649, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '11822:1:1', + 'src': '12157:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -8254,20 +8746,20 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '11811:12:1', + 'src': '12146:12:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, 'falseBody': null, - 'id': 633, + 'id': 668, 'nodeType': 'IfStatement', - 'src': '11807:822:1', + 'src': '12142:822:1', 'trueBody': { - 'id': 632, + 'id': 667, 'nodeType': 'Block', - 'src': '11825:804:1', + 'src': '12160:804:1', 'statements': [ { 'expression': { @@ -8275,12 +8767,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 620, + 'id': 655, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '12437:4:1', + 'referencedDeclaration': 524, + 'src': '12772:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -8290,18 +8782,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 621, + 'id': 656, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '12443:3:1', + 'referencedDeclaration': 1386, + 'src': '12778:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 622, + 'id': 657, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -8309,7 +8801,7 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '12443:10:1', + 'src': '12778:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -8317,12 +8809,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 623, + 'id': 658, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '12455:8:1', + 'referencedDeclaration': 534, + 'src': '12790:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8349,12 +8841,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 617, + 'id': 652, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '12410:12:1', + 'referencedDeclaration': 528, + 'src': '12745:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -8368,18 +8860,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 616, + 'id': 651, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '12404:5:1', + 'referencedDeclaration': 1302, + 'src': '12739:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 618, + 'id': 653, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -8387,27 +8879,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12404:19:1', + 'src': '12739:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 619, + 'id': 654, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'transferFrom', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 1014, - 'src': '12404:32:1', + 'referencedDeclaration': 1049, + 'src': '12739:32:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', 'typeString': 'function (address,address,uint256) external returns (bool)' } }, - 'id': 624, + 'id': 659, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -8415,15 +8907,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12404:60:1', + 'src': '12739:60:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'id': 625, + 'id': 660, 'nodeType': 'ExpressionStatement', - 'src': '12404:60:1' + 'src': '12739:60:1' }, { 'expression': { @@ -8434,18 +8926,18 @@ let compiledSubscription1 = { 'arguments': [], 'expression': { 'argumentTypes': [], - 'id': 627, + 'id': 662, 'name': 'checkSuccess', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 652, - 'src': '12503:12:1', + 'referencedDeclaration': 687, + 'src': '12838:12:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', 'typeString': 'function () pure returns (bool)' } }, - 'id': 628, + 'id': 663, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -8453,7 +8945,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12503:14:1', + 'src': '12838:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -8462,14 +8954,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74', - 'id': 629, + 'id': 664, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '12535:69:1', + 'src': '12870:69:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7', @@ -8489,21 +8981,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Subscription::executeSubscription Failed to pay gas as from account\'' } ], - 'id': 626, + 'id': 661, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '12478:7:1', + 'referencedDeclaration': 1390, + 'src': '12813:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 630, + 'id': 665, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -8511,15 +9003,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12478:140:1', + 'src': '12813:140:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 631, + 'id': 666, 'nodeType': 'ExpressionStatement', - 'src': '12478:140:1' + 'src': '12813:140:1' } ] } @@ -8528,14 +9020,14 @@ let compiledSubscription1 = { 'expression': { 'argumentTypes': null, 'hexValue': '74727565', - 'id': 634, + 'id': 669, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'bool', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '12646:4:1', + 'src': '12981:4:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_bool', @@ -8543,31 +9035,31 @@ let compiledSubscription1 = { }, 'value': 'true' }, - 'functionReturnParameters': 507, - 'id': 635, + 'functionReturnParameters': 542, + 'id': 670, 'nodeType': 'Return', - 'src': '12639:11:1' + 'src': '12974:11:1' } ] }, 'documentation': null, - 'id': 637, + 'id': 672, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'executeSubscription', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 504, + 'id': 539, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 489, + 'id': 524, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9604:12:1', + 'scope': 672, + 'src': '9939:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8575,10 +9067,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 488, + 'id': 523, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '9604:7:1', + 'src': '9939:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -8590,11 +9082,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 491, + 'id': 526, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9643:10:1', + 'scope': 672, + 'src': '9978:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8602,10 +9094,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 490, + 'id': 525, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '9643:7:1', + 'src': '9978:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -8617,11 +9109,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 493, + 'id': 528, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9679:20:1', + 'scope': 672, + 'src': '10014:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8629,10 +9121,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 492, + 'id': 527, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '9679:7:1', + 'src': '10014:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -8644,11 +9136,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 495, + 'id': 530, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9751:19:1', + 'scope': 672, + 'src': '10086:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8656,10 +9148,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 494, + 'id': 529, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9751:7:1', + 'src': '10086:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8670,11 +9162,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 497, + 'id': 532, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9821:21:1', + 'scope': 672, + 'src': '10156:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8682,10 +9174,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 496, + 'id': 531, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9821:7:1', + 'src': '10156:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8696,11 +9188,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 499, + 'id': 534, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9893:16:1', + 'scope': 672, + 'src': '10228:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8708,10 +9200,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 498, + 'id': 533, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9893:7:1', + 'src': '10228:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8722,11 +9214,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 501, + 'id': 536, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9977:13:1', + 'scope': 672, + 'src': '10312:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8734,10 +9226,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 500, + 'id': 535, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9977:7:1', + 'src': '10312:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8748,11 +9240,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 503, + 'id': 538, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '10060:22:1', + 'scope': 672, + 'src': '10395:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -8760,10 +9252,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 502, + 'id': 537, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '10060:5:1', + 'src': '10395:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -8773,19 +9265,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '9594:544:1' + 'src': '9929:544:1' }, 'returnParameters': { - 'id': 507, + 'id': 542, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 506, + 'id': 541, 'name': 'success', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '10171:12:1', + 'scope': 672, + 'src': '10506:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8793,10 +9285,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 505, + 'id': 540, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '10171:4:1', + 'src': '10506:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -8806,32 +9298,32 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '10170:14:1' + 'src': '10505:14:1' }, - 'scope': 675, - 'src': '9566:3091:1', + 'scope': 710, + 'src': '9901:3091:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 651, + 'id': 686, 'nodeType': 'Block', - 'src': '13157:770:1', + 'src': '13492:770:1', 'statements': [ { 'assignments': [ - 643 + 678 ], 'declarations': [ { 'constant': false, - 'id': 643, + 'id': 678, 'name': 'returnValue', 'nodeType': 'VariableDeclaration', - 'scope': 651, - 'src': '13167:19:1', + 'scope': 686, + 'src': '13502:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8839,10 +9331,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 642, + 'id': 677, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '13167:7:1', + 'src': '13502:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8852,18 +9344,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 645, + 'id': 680, 'initialValue': { 'argumentTypes': null, 'hexValue': '30', - 'id': 644, + 'id': 679, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '13189:1:1', + 'src': '13524:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -8872,33 +9364,33 @@ let compiledSubscription1 = { 'value': '0' }, 'nodeType': 'VariableDeclarationStatement', - 'src': '13167:23:1' + 'src': '13502:23:1' }, { 'externalReferences': [ { 'returnValue': { - 'declaration': 643, + 'declaration': 678, 'isOffset': false, 'isSlot': false, - 'src': '13472:11:1', + 'src': '13807:11:1', 'valueSize': 1 } }, { 'returnValue': { - 'declaration': 643, + 'declaration': 678, 'isOffset': false, 'isSlot': false, - 'src': '13749:11:1', + 'src': '14084:11:1', 'valueSize': 1 } } ], - 'id': 646, + 'id': 681, 'nodeType': 'InlineAssembly', 'operations': '{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}', - 'src': '13268:635:1' + 'src': '13603:635:1' }, { 'expression': { @@ -8907,19 +9399,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 649, + 'id': 684, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 647, + 'id': 682, 'name': 'returnValue', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 643, - 'src': '13904:11:1', + 'referencedDeclaration': 678, + 'src': '14239:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -8930,14 +9422,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 648, + 'id': 683, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '13919:1:1', + 'src': '14254:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -8945,43 +9437,43 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '13904:16:1', + 'src': '14239:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'functionReturnParameters': 641, - 'id': 650, + 'functionReturnParameters': 676, + 'id': 685, 'nodeType': 'Return', - 'src': '13897:23:1' + 'src': '14232:23:1' } ] }, 'documentation': 'Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.', - 'id': 652, + 'id': 687, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'checkSuccess', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 638, + 'id': 673, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '13093:7:1' + 'src': '13428:7:1' }, 'returnParameters': { - 'id': 641, + 'id': 676, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 640, + 'id': 675, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 652, - 'src': '13147:4:1', + 'scope': 687, + 'src': '13482:4:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -8989,10 +9481,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 639, + 'id': 674, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '13147:4:1', + 'src': '13482:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -9002,19 +9494,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '13146:6:1' + 'src': '13481:6:1' }, - 'scope': 675, - 'src': '13072:855:1', + 'scope': 710, + 'src': '13407:855:1', 'stateMutability': 'pure', 'superFunction': null, 'visibility': 'private' }, { 'body': { - 'id': 666, + 'id': 701, 'nodeType': 'Block', - 'src': '14101:70:1', + 'src': '14436:68:1', 'statements': [ { 'expression': { @@ -9026,7 +9518,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' }, - 'id': 659, + 'id': 694, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -9035,18 +9527,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 656, + 'id': 691, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '14117:3:1', + 'referencedDeclaration': 1386, + 'src': '14452:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 657, + 'id': 692, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -9054,7 +9546,7 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '14117:10:1', + 'src': '14452:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -9064,18 +9556,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 658, - 'name': 'author', + 'id': 693, + 'name': 'owner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], 'referencedDeclaration': 69, - 'src': '14129:6:1', + 'src': '14464:5:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '14117:18:1', + 'src': '14452:17:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -9089,21 +9581,21 @@ let compiledSubscription1 = { 'typeString': 'bool' } ], - 'id': 655, + 'id': 690, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1354, - 'src': '14109:7:1', + 'referencedDeclaration': 1389, + 'src': '14444:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', 'typeString': 'function (bool) pure' } }, - 'id': 660, + 'id': 695, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -9111,15 +9603,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '14109:27:1', + 'src': '14444:26:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 661, + 'id': 696, 'nodeType': 'ExpressionStatement', - 'src': '14109:27:1' + 'src': '14444:26:1' }, { 'expression': { @@ -9127,12 +9619,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 663, - 'name': 'author', + 'id': 698, + 'name': 'owner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], 'referencedDeclaration': 69, - 'src': '14157:6:1', + 'src': '14491:5:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -9146,18 +9638,18 @@ let compiledSubscription1 = { 'typeString': 'address payable' } ], - 'id': 662, + 'id': 697, 'name': 'selfdestruct', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1359, - 'src': '14144:12:1', + 'referencedDeclaration': 1394, + 'src': '14478:12:1', 'typeDescriptions': { 'typeIdentifier': 't_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$', 'typeString': 'function (address payable)' } }, - 'id': 664, + 'id': 699, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -9165,48 +9657,48 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '14144:20:1', + 'src': '14478:19:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 665, + 'id': 700, 'nodeType': 'ExpressionStatement', - 'src': '14144:20:1' + 'src': '14478:19:1' } ] }, 'documentation': null, - 'id': 667, + 'id': 702, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'endContract', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 653, + 'id': 688, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14077:2:1' + 'src': '14412:2:1' }, 'returnParameters': { - 'id': 654, + 'id': 689, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14101:0:1' + 'src': '14436:0:1' }, - 'scope': 675, - 'src': '14057:114:1', + 'scope': 710, + 'src': '14392:112:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'external' }, { 'body': { - 'id': 673, + 'id': 708, 'nodeType': 'Block', - 'src': '14277:25:1', + 'src': '14610:25:1', 'statements': [ { 'expression': { @@ -9214,21 +9706,21 @@ let compiledSubscription1 = { 'arguments': [], 'expression': { 'argumentTypes': [], - 'id': 670, + 'id': 705, 'name': 'revert', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1356, - 1357 + 1391, + 1392 ], - 'referencedDeclaration': 1356, - 'src': '14286:6:1', + 'referencedDeclaration': 1391, + 'src': '14619:6:1', 'typeDescriptions': { 'typeIdentifier': 't_function_revert_pure$__$returns$__$', 'typeString': 'function () pure' } }, - 'id': 671, + 'id': 706, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -9236,58 +9728,58 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '14286:9:1', + 'src': '14619:9:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 672, + 'id': 707, 'nodeType': 'ExpressionStatement', - 'src': '14286:9:1' + 'src': '14619:9:1' } ] }, 'documentation': null, - 'id': 674, + 'id': 709, 'implemented': true, 'kind': 'fallback', 'modifiers': [], 'name': '', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 668, + 'id': 703, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14257:2:1' + 'src': '14590:2:1' }, 'returnParameters': { - 'id': 669, + 'id': 704, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14277:0:1' + 'src': '14610:0:1' }, - 'scope': 675, - 'src': '14248:54:1', + 'scope': 710, + 'src': '14581:54:1', 'stateMutability': 'payable', 'superFunction': null, 'visibility': 'external' } ], - 'scope': 676, - 'src': '1091:13213:1' + 'scope': 711, + 'src': '1091:13546:1' } ], - 'src': '0:14305:1' + 'src': '0:14638:1' }, 'legacyAST': { 'absolutePath': '/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol', 'exportedSymbols': { 'Subscription': [ - 675 + 710 ] }, - 'id': 676, + 'id': 711, 'nodeType': 'SourceUnit', 'nodes': [ { @@ -9306,8 +9798,8 @@ let compiledSubscription1 = { 'file': 'openzeppelin-solidity/contracts/cryptography/ECDSA.sol', 'id': 59, 'nodeType': 'ImportDirective', - 'scope': 676, - 'sourceUnit': 757, + 'scope': 711, + 'sourceUnit': 792, 'src': '900:64:1', 'symbolAliases': [], 'unitAlias': '' @@ -9317,8 +9809,8 @@ let compiledSubscription1 = { 'file': 'openzeppelin-solidity/contracts/math/SafeMath.sol', 'id': 60, 'nodeType': 'ImportDirective', - 'scope': 676, - 'sourceUnit': 885, + 'scope': 711, + 'sourceUnit': 920, 'src': '965:59:1', 'symbolAliases': [], 'unitAlias': '' @@ -9328,8 +9820,8 @@ let compiledSubscription1 = { 'file': 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol', 'id': 61, 'nodeType': 'ImportDirective', - 'scope': 676, - 'sourceUnit': 1268, + 'scope': 711, + 'sourceUnit': 1303, 'src': '1025:63:1', 'symbolAliases': [], 'unitAlias': '' @@ -9340,9 +9832,9 @@ let compiledSubscription1 = { 'contractKind': 'contract', 'documentation': null, 'fullyImplemented': true, - 'id': 675, + 'id': 710, 'linearizedBaseContracts': [ - 675 + 710 ], 'name': 'Subscription', 'nodeType': 'ContractDefinition', @@ -9354,10 +9846,10 @@ let compiledSubscription1 = { 'id': 62, 'name': 'ECDSA', 'nodeType': 'UserDefinedTypeName', - 'referencedDeclaration': 756, + 'referencedDeclaration': 791, 'src': '1125:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ECDSA_$756', + 'typeIdentifier': 't_contract$_ECDSA_$791', 'typeString': 'library ECDSA' } }, @@ -9381,10 +9873,10 @@ let compiledSubscription1 = { 'id': 65, 'name': 'SafeMath', 'nodeType': 'UserDefinedTypeName', - 'referencedDeclaration': 884, + 'referencedDeclaration': 919, 'src': '1154:8:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_SafeMath_$884', + 'typeIdentifier': 't_contract$_SafeMath_$919', 'typeString': 'library SafeMath' } }, @@ -9404,10 +9896,10 @@ let compiledSubscription1 = { { 'constant': false, 'id': 69, - 'name': 'author', + 'name': 'owner', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1212:29:1', + 'scope': 710, + 'src': '1212:28:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9431,10 +9923,36 @@ let compiledSubscription1 = { { 'constant': false, 'id': 71, + 'name': 'contractVersion', + 'nodeType': 'VariableDeclaration', + 'scope': 710, + 'src': '1246:28:1', + 'stateVariable': true, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + }, + 'typeName': { + 'id': 70, + 'name': 'uint8', + 'nodeType': 'ElementaryTypeName', + 'src': '1246:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'value': null, + 'visibility': 'public' + }, + { + 'constant': false, + 'id': 73, 'name': 'relayer', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1288:22:1', + 'scope': 710, + 'src': '1321:22:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9442,10 +9960,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 70, + 'id': 72, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '1288:7:1', + 'src': '1321:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9457,11 +9975,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 73, + 'id': 75, 'name': 'requiredToAddress', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1470:32:1', + 'scope': 710, + 'src': '1503:32:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9469,10 +9987,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 72, + 'id': 74, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '1470:7:1', + 'src': '1503:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9484,11 +10002,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 75, + 'id': 77, 'name': 'requiredTokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1508:35:1', + 'scope': 710, + 'src': '1541:35:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9496,10 +10014,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 74, + 'id': 76, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '1508:7:1', + 'src': '1541:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9511,11 +10029,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 77, + 'id': 79, 'name': 'requiredTokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1549:34:1', + 'scope': 710, + 'src': '1582:34:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9523,10 +10041,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 76, + 'id': 78, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1549:7:1', + 'src': '1582:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9537,11 +10055,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 79, + 'id': 81, 'name': 'requiredPeriodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1589:36:1', + 'scope': 710, + 'src': '1622:36:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9549,10 +10067,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 78, + 'id': 80, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1589:7:1', + 'src': '1622:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9563,11 +10081,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 81, + 'id': 83, 'name': 'requiredGasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1631:31:1', + 'scope': 710, + 'src': '1664:31:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9575,10 +10093,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 80, + 'id': 82, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1631:7:1', + 'src': '1664:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9589,11 +10107,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 85, + 'id': 87, 'name': 'nextValidTimestamp', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '1854:53:1', + 'scope': 710, + 'src': '1887:53:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9601,28 +10119,28 @@ let compiledSubscription1 = { 'typeString': 'mapping(bytes32 => uint256)' }, 'typeName': { - 'id': 84, + 'id': 86, 'keyType': { - 'id': 82, + 'id': 84, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '1862:7:1', + 'src': '1895:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'Mapping', - 'src': '1854:27:1', + 'src': '1887:27:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' }, 'valueType': { - 'id': 83, + 'id': 85, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '1873:7:1', + 'src': '1906:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9634,11 +10152,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 89, + 'id': 91, 'name': 'extraNonce', 'nodeType': 'VariableDeclaration', - 'scope': 675, - 'src': '2088:45:1', + 'scope': 710, + 'src': '2121:45:1', 'stateVariable': true, 'storageLocation': 'default', 'typeDescriptions': { @@ -9646,28 +10164,28 @@ let compiledSubscription1 = { 'typeString': 'mapping(address => uint256)' }, 'typeName': { - 'id': 88, + 'id': 90, 'keyType': { - 'id': 86, + 'id': 88, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2096:7:1', + 'src': '2129:7:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, 'nodeType': 'Mapping', - 'src': '2088:27:1', + 'src': '2121:27:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', 'typeString': 'mapping(address => uint256)' }, 'valueType': { - 'id': 87, + 'id': 89, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2107:7:1', + 'src': '2140:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9680,21 +10198,21 @@ let compiledSubscription1 = { { 'anonymous': false, 'documentation': null, - 'id': 105, + 'id': 107, 'name': 'ExecuteSubscription', 'nodeType': 'EventDefinition', 'parameters': { - 'id': 104, + 'id': 106, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 91, + 'id': 93, 'indexed': true, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2175:20:1', + 'scope': 107, + 'src': '2208:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9702,10 +10220,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 90, + 'id': 92, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2175:7:1', + 'src': '2208:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9717,12 +10235,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 93, + 'id': 95, 'indexed': true, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2222:18:1', + 'scope': 107, + 'src': '2255:18:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9730,10 +10248,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 92, + 'id': 94, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2222:7:1', + 'src': '2255:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9745,12 +10263,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 95, + 'id': 97, 'indexed': false, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2266:20:1', + 'scope': 107, + 'src': '2299:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9758,10 +10276,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 94, + 'id': 96, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2266:7:1', + 'src': '2299:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9773,12 +10291,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 97, + 'id': 99, 'indexed': false, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2338:19:1', + 'scope': 107, + 'src': '2371:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9786,10 +10304,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 96, + 'id': 98, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2338:7:1', + 'src': '2371:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9800,12 +10318,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 99, + 'id': 101, 'indexed': false, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2408:21:1', + 'scope': 107, + 'src': '2441:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9813,10 +10331,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 98, + 'id': 100, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2408:7:1', + 'src': '2441:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9827,12 +10345,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 101, + 'id': 103, 'indexed': false, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2480:16:1', + 'scope': 107, + 'src': '2513:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9840,10 +10358,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 100, + 'id': 102, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2480:7:1', + 'src': '2513:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9854,12 +10372,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 103, + 'id': 105, 'indexed': false, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 105, - 'src': '2557:13:1', + 'scope': 107, + 'src': '2590:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9867,10 +10385,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 102, + 'id': 104, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2557:7:1', + 'src': '2590:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -9880,28 +10398,28 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '2165:471:1' + 'src': '2198:471:1' }, - 'src': '2140:497:1' + 'src': '2173:497:1' }, { 'anonymous': false, 'documentation': null, - 'id': 121, + 'id': 123, 'name': 'CancelSubscription', 'nodeType': 'EventDefinition', 'parameters': { - 'id': 120, + 'id': 122, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 107, + 'id': 109, 'indexed': true, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2677:20:1', + 'scope': 123, + 'src': '2710:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9909,10 +10427,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 106, + 'id': 108, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2677:7:1', + 'src': '2710:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9924,12 +10442,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 109, + 'id': 111, 'indexed': true, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2724:18:1', + 'scope': 123, + 'src': '2757:18:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9937,10 +10455,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 108, + 'id': 110, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2724:7:1', + 'src': '2757:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9952,12 +10470,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 111, + 'id': 113, 'indexed': false, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2768:20:1', + 'scope': 123, + 'src': '2801:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9965,10 +10483,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 110, + 'id': 112, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '2768:7:1', + 'src': '2801:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -9980,12 +10498,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 113, + 'id': 115, 'indexed': false, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2840:19:1', + 'scope': 123, + 'src': '2873:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -9993,10 +10511,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 112, + 'id': 114, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2840:7:1', + 'src': '2873:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10007,12 +10525,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 115, + 'id': 117, 'indexed': false, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2910:21:1', + 'scope': 123, + 'src': '2943:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10020,10 +10538,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 114, + 'id': 116, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2910:7:1', + 'src': '2943:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10034,12 +10552,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 117, + 'id': 119, 'indexed': false, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '2982:16:1', + 'scope': 123, + 'src': '3015:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10047,10 +10565,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 116, + 'id': 118, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '2982:7:1', + 'src': '3015:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10061,12 +10579,12 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 119, + 'id': 121, 'indexed': false, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 121, - 'src': '3059:13:1', + 'scope': 123, + 'src': '3092:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10074,10 +10592,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 118, + 'id': 120, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3059:7:1', + 'src': '3092:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10087,32 +10605,103 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '2667:471:1' + 'src': '2700:471:1' + }, + 'src': '2676:496:1' + }, + { + 'anonymous': false, + 'documentation': null, + 'id': 129, + 'name': 'ownershipChanged', + 'nodeType': 'EventDefinition', + 'parameters': { + 'id': 128, + 'nodeType': 'ParameterList', + 'parameters': [ + { + 'constant': false, + 'id': 125, + 'indexed': false, + 'name': 'oldOwner', + 'nodeType': 'VariableDeclaration', + 'scope': 129, + 'src': '3210:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 124, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3210:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 127, + 'indexed': false, + 'name': 'newOwner', + 'nodeType': 'VariableDeclaration', + 'scope': 129, + 'src': '3236:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 126, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3236:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3200:58:1' }, - 'src': '2643:496:1' + 'src': '3178:81:1' }, { 'body': { - 'id': 167, + 'id': 179, 'nodeType': 'Block', - 'src': '3368:266:1', + 'src': '3488:292:1', 'statements': [ { 'expression': { 'argumentTypes': null, - 'id': 140, + 'id': 148, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 138, + 'id': 146, 'name': 'requiredToAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 73, - 'src': '3378:17:1', + 'referencedDeclaration': 75, + 'src': '3498:17:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -10122,43 +10711,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 139, + 'id': 147, 'name': '_toAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 123, - 'src': '3396:10:1', + 'referencedDeclaration': 131, + 'src': '3516:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '3378:28:1', + 'src': '3498:28:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'id': 141, + 'id': 149, 'nodeType': 'ExpressionStatement', - 'src': '3378:28:1' + 'src': '3498:28:1' }, { 'expression': { 'argumentTypes': null, - 'id': 144, + 'id': 152, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 142, + 'id': 150, 'name': 'requiredTokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 75, - 'src': '3416:20:1', + 'referencedDeclaration': 77, + 'src': '3536:20:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -10168,43 +10757,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 143, + 'id': 151, 'name': '_tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 125, - 'src': '3437:13:1', + 'referencedDeclaration': 133, + 'src': '3557:13:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '3416:34:1', + 'src': '3536:34:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'id': 145, + 'id': 153, 'nodeType': 'ExpressionStatement', - 'src': '3416:34:1' + 'src': '3536:34:1' }, { 'expression': { 'argumentTypes': null, - 'id': 148, + 'id': 156, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 146, + 'id': 154, 'name': 'requiredTokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 77, - 'src': '3460:19:1', + 'referencedDeclaration': 79, + 'src': '3580:19:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10214,43 +10803,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 147, + 'id': 155, 'name': '_tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 127, - 'src': '3480:12:1', + 'referencedDeclaration': 135, + 'src': '3600:12:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '3460:32:1', + 'src': '3580:32:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 149, + 'id': 157, 'nodeType': 'ExpressionStatement', - 'src': '3460:32:1' + 'src': '3580:32:1' }, { 'expression': { 'argumentTypes': null, - 'id': 152, + 'id': 160, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 150, + 'id': 158, 'name': 'requiredPeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 79, - 'src': '3502:21:1', + 'referencedDeclaration': 81, + 'src': '3622:21:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10260,43 +10849,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 151, + 'id': 159, 'name': '_periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 129, - 'src': '3524:14:1', + 'referencedDeclaration': 137, + 'src': '3644:14:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '3502:36:1', + 'src': '3622:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 153, + 'id': 161, 'nodeType': 'ExpressionStatement', - 'src': '3502:36:1' + 'src': '3622:36:1' }, { 'expression': { 'argumentTypes': null, - 'id': 156, + 'id': 164, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 154, + 'id': 162, 'name': 'requiredGasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 81, - 'src': '3548:16:1', + 'referencedDeclaration': 83, + 'src': '3668:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10306,43 +10895,43 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 155, + 'id': 163, 'name': '_gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 131, - 'src': '3565:9:1', + 'referencedDeclaration': 139, + 'src': '3685:9:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '3548:26:1', + 'src': '3668:26:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 157, + 'id': 165, 'nodeType': 'ExpressionStatement', - 'src': '3548:26:1' + 'src': '3668:26:1' }, { 'expression': { 'argumentTypes': null, - 'id': 161, + 'id': 169, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 158, - 'name': 'author', + 'id': 166, + 'name': 'owner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], 'referencedDeclaration': 69, - 'src': '3584:6:1', + 'src': '3704:5:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -10354,18 +10943,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 159, + 'id': 167, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '3591:3:1', + 'referencedDeclaration': 1386, + 'src': '3710:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 160, + 'id': 168, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -10373,38 +10962,38 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '3591:10:1', + 'src': '3710:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '3584:17:1', + 'src': '3704:16:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'id': 162, + 'id': 170, 'nodeType': 'ExpressionStatement', - 'src': '3584:17:1' + 'src': '3704:16:1' }, { 'expression': { 'argumentTypes': null, - 'id': 165, + 'id': 173, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftHandSide': { 'argumentTypes': null, - 'id': 163, + 'id': 171, 'name': 'relayer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 71, - 'src': '3611:7:1', + 'referencedDeclaration': 73, + 'src': '3730:7:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -10414,47 +11003,98 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 164, + 'id': 172, 'name': '_relayer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 135, - 'src': '3619:8:1', + 'referencedDeclaration': 143, + 'src': '3738:8:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '3611:16:1', + 'src': '3730:16:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'id': 166, + 'id': 174, + 'nodeType': 'ExpressionStatement', + 'src': '3730:16:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 177, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 175, + 'name': 'contractVersion', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 71, + 'src': '3756:15:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'hexValue': '31', + 'id': 176, + 'isConstant': false, + 'isLValue': false, + 'isPure': true, + 'kind': 'number', + 'lValueRequested': false, + 'nodeType': 'Literal', + 'src': '3772:1:1', + 'subdenomination': null, + 'typeDescriptions': { + 'typeIdentifier': 't_rational_1_by_1', + 'typeString': 'int_const 1' + }, + 'value': '1' + }, + 'src': '3756:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'id': 178, 'nodeType': 'ExpressionStatement', - 'src': '3611:16:1' + 'src': '3756:17:1' } ] }, 'documentation': null, - 'id': 168, + 'id': 180, 'implemented': true, 'kind': 'constructor', 'modifiers': [], 'name': '', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 136, + 'id': 144, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 123, + 'id': 131, 'name': '_toAddress', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3166:18:1', + 'scope': 180, + 'src': '3286:18:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10462,10 +11102,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 122, + 'id': 130, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '3166:7:1', + 'src': '3286:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -10477,11 +11117,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 125, + 'id': 133, 'name': '_tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3194:21:1', + 'scope': 180, + 'src': '3314:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10489,10 +11129,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 124, + 'id': 132, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '3194:7:1', + 'src': '3314:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -10504,11 +11144,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 127, + 'id': 135, 'name': '_tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3225:20:1', + 'scope': 180, + 'src': '3345:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10516,10 +11156,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 126, + 'id': 134, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3225:7:1', + 'src': '3345:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10530,11 +11170,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 129, + 'id': 137, 'name': '_periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3255:22:1', + 'scope': 180, + 'src': '3375:22:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10542,10 +11182,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 128, + 'id': 136, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3255:7:1', + 'src': '3375:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10556,11 +11196,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 131, + 'id': 139, 'name': '_gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3287:17:1', + 'scope': 180, + 'src': '3407:17:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -10568,91 +11208,390 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 130, + 'id': 138, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3287:7:1', + 'src': '3407:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'value': null, - 'visibility': 'internal' + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 141, + 'name': '_version', + 'nodeType': 'VariableDeclaration', + 'scope': 180, + 'src': '3434:14:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + }, + 'typeName': { + 'id': 140, + 'name': 'uint8', + 'nodeType': 'ElementaryTypeName', + 'src': '3434:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_uint8', + 'typeString': 'uint8' + } + }, + 'value': null, + 'visibility': 'internal' + }, + { + 'constant': false, + 'id': 143, + 'name': '_relayer', + 'nodeType': 'VariableDeclaration', + 'scope': 180, + 'src': '3458:16:1', + 'stateVariable': false, + 'storageLocation': 'default', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + }, + 'typeName': { + 'id': 142, + 'name': 'address', + 'nodeType': 'ElementaryTypeName', + 'src': '3458:7:1', + 'stateMutability': 'nonpayable', + 'typeDescriptions': { + 'typeIdentifier': 't_address', + 'typeString': 'address' + } + }, + 'value': null, + 'visibility': 'internal' + } + ], + 'src': '3276:204:1' + }, + 'returnParameters': { + 'id': 145, + 'nodeType': 'ParameterList', + 'parameters': [], + 'src': '3488:0:1' + }, + 'scope': 710, + 'src': '3265:515:1', + 'stateMutability': 'nonpayable', + 'superFunction': null, + 'visibility': 'public' + }, + { + 'body': { + 'id': 202, + 'nodeType': 'Block', + 'src': '3855:114:1', + 'statements': [ + { + 'expression': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'commonType': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + 'id': 189, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftExpression': { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 186, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1386, + 'src': '3871:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 187, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '3871:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'BinaryOperation', + 'operator': '==', + 'rightExpression': { + 'argumentTypes': null, + 'id': 188, + 'name': 'owner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3883:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '3871:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_bool', + 'typeString': 'bool' + } + ], + 'id': 185, + 'name': 'require', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [ + 1389, + 1390 + ], + 'referencedDeclaration': 1389, + 'src': '3863:7:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', + 'typeString': 'function (bool) pure' + } + }, + 'id': 190, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '3863:26:1', + 'typeDescriptions': { + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' + } + }, + 'id': 191, + 'nodeType': 'ExpressionStatement', + 'src': '3863:26:1' + }, + { + 'expression': { + 'argumentTypes': null, + 'id': 194, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'leftHandSide': { + 'argumentTypes': null, + 'id': 192, + 'name': 'owner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3897:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'nodeType': 'Assignment', + 'operator': '=', + 'rightHandSide': { + 'argumentTypes': null, + 'id': 193, + 'name': '_newOwner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 182, + 'src': '3905:9:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'src': '3897:17:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + 'id': 195, + 'nodeType': 'ExpressionStatement', + 'src': '3897:17:1' }, { - 'constant': false, - 'id': 133, - 'name': '_version', - 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3314:14:1', - 'stateVariable': false, - 'storageLocation': 'default', - 'typeDescriptions': { - 'typeIdentifier': 't_uint8', - 'typeString': 'uint8' - }, - 'typeName': { - 'id': 132, - 'name': 'uint8', - 'nodeType': 'ElementaryTypeName', - 'src': '3314:5:1', + 'eventCall': { + 'argumentTypes': null, + 'arguments': [ + { + 'argumentTypes': null, + 'expression': { + 'argumentTypes': null, + 'id': 197, + 'name': 'msg', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 1386, + 'src': '3944:3:1', + 'typeDescriptions': { + 'typeIdentifier': 't_magic_message', + 'typeString': 'msg' + } + }, + 'id': 198, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'lValueRequested': false, + 'memberName': 'sender', + 'nodeType': 'MemberAccess', + 'referencedDeclaration': null, + 'src': '3944:10:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + }, + { + 'argumentTypes': null, + 'id': 199, + 'name': 'owner', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 69, + 'src': '3956:5:1', + 'typeDescriptions': { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + } + ], + 'expression': { + 'argumentTypes': [ + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + }, + { + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' + } + ], + 'id': 196, + 'name': 'ownershipChanged', + 'nodeType': 'Identifier', + 'overloadedDeclarations': [], + 'referencedDeclaration': 129, + 'src': '3927:16:1', + 'typeDescriptions': { + 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$returns$__$', + 'typeString': 'function (address,address)' + } + }, + 'id': 200, + 'isConstant': false, + 'isLValue': false, + 'isPure': false, + 'kind': 'functionCall', + 'lValueRequested': false, + 'names': [], + 'nodeType': 'FunctionCall', + 'src': '3927:35:1', 'typeDescriptions': { - 'typeIdentifier': 't_uint8', - 'typeString': 'uint8' + 'typeIdentifier': 't_tuple$__$', + 'typeString': 'tuple()' } }, - 'value': null, - 'visibility': 'internal' - }, + 'id': 201, + 'nodeType': 'EmitStatement', + 'src': '3922:40:1' + } + ] + }, + 'documentation': null, + 'id': 203, + 'implemented': true, + 'kind': 'function', + 'modifiers': [], + 'name': 'changeOwnership', + 'nodeType': 'FunctionDefinition', + 'parameters': { + 'id': 183, + 'nodeType': 'ParameterList', + 'parameters': [ { 'constant': false, - 'id': 135, - 'name': '_relayer', + 'id': 182, + 'name': '_newOwner', 'nodeType': 'VariableDeclaration', - 'scope': 168, - 'src': '3338:16:1', + 'scope': 203, + 'src': '3811:25:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { - 'typeIdentifier': 't_address', - 'typeString': 'address' + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' }, 'typeName': { - 'id': 134, + 'id': 181, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '3338:7:1', - 'stateMutability': 'nonpayable', + 'src': '3811:15:1', + 'stateMutability': 'payable', 'typeDescriptions': { - 'typeIdentifier': 't_address', - 'typeString': 'address' + 'typeIdentifier': 't_address_payable', + 'typeString': 'address payable' } }, 'value': null, 'visibility': 'internal' } ], - 'src': '3156:204:1' + 'src': '3810:27:1' }, 'returnParameters': { - 'id': 137, + 'id': 184, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '3368:0:1' + 'src': '3855:0:1' }, - 'scope': 675, - 'src': '3145:489:1', + 'scope': 710, + 'src': '3786:183:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 200, + 'id': 235, 'nodeType': 'Block', - 'src': '4037:227:1', + 'src': '4372:227:1', 'statements': [ { 'condition': { @@ -10661,7 +11600,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 184, + 'id': 219, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -10670,26 +11609,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 177, + 'id': 212, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '4050:18:1', + 'referencedDeclaration': 87, + 'src': '4385:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 179, + 'id': 214, 'indexExpression': { 'argumentTypes': null, - 'id': 178, + 'id': 213, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 170, - 'src': '4069:16:1', + 'referencedDeclaration': 205, + 'src': '4404:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -10700,7 +11639,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '4050:36:1', + 'src': '4385:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10713,7 +11652,7 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 182, + 'id': 217, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -10721,18 +11660,18 @@ let compiledSubscription1 = { 'nodeType': 'UnaryOperation', 'operator': '-', 'prefix': true, - 'src': '4096:2:1', + 'src': '4431:2:1', 'subExpression': { 'argumentTypes': null, 'hexValue': '31', - 'id': 181, + 'id': 216, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '4097:1:1', + 'src': '4432:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_1_by_1', @@ -10753,20 +11692,20 @@ let compiledSubscription1 = { 'typeString': 'int_const -1' } ], - 'id': 180, + 'id': 215, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '4088:7:1', + 'src': '4423:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_uint256_$', 'typeString': 'type(uint256)' }, 'typeName': 'uint256' }, - 'id': 183, + 'id': 218, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -10774,39 +11713,39 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '4088:11:1', + 'src': '4423:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '4050:49:1', + 'src': '4385:49:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, 'falseBody': null, - 'id': 188, + 'id': 223, 'nodeType': 'IfStatement', - 'src': '4047:88:1', + 'src': '4382:88:1', 'trueBody': { - 'id': 187, + 'id': 222, 'nodeType': 'Block', - 'src': '4100:35:1', + 'src': '4435:35:1', 'statements': [ { 'expression': { 'argumentTypes': null, 'hexValue': '66616c7365', - 'id': 185, + 'id': 220, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'bool', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '4119:5:1', + 'src': '4454:5:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_bool', @@ -10814,10 +11753,10 @@ let compiledSubscription1 = { }, 'value': 'false' }, - 'functionReturnParameters': 176, - 'id': 186, + 'functionReturnParameters': 211, + 'id': 221, 'nodeType': 'Return', - 'src': '4112:12:1' + 'src': '4447:12:1' } ] } @@ -10832,7 +11771,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 197, + 'id': 232, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -10841,18 +11780,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 189, + 'id': 224, 'name': 'block', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1341, - 'src': '4152:5:1', + 'referencedDeclaration': 1376, + 'src': '4487:5:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_block', 'typeString': 'block' } }, - 'id': 190, + 'id': 225, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -10860,7 +11799,7 @@ let compiledSubscription1 = { 'memberName': 'timestamp', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '4152:15:1', + 'src': '4487:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10873,12 +11812,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 195, + 'id': 230, 'name': 'gracePeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 172, - 'src': '4228:18:1', + 'referencedDeclaration': 207, + 'src': '4563:18:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -10896,26 +11835,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 191, + 'id': 226, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '4187:18:1', + 'referencedDeclaration': 87, + 'src': '4522:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 193, + 'id': 228, 'indexExpression': { 'argumentTypes': null, - 'id': 192, + 'id': 227, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 170, - 'src': '4206:16:1', + 'referencedDeclaration': 205, + 'src': '4541:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -10926,27 +11865,27 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '4187:36:1', + 'src': '4522:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 194, + 'id': 229, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '4187:40:1', + 'referencedDeclaration': 898, + 'src': '4522:40:1', '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': 196, + 'id': 231, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -10954,57 +11893,57 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '4187:60:1', + 'src': '4522:60:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '4152:95:1', + 'src': '4487:95:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } } ], - 'id': 198, + 'id': 233, 'isConstant': false, 'isInlineArray': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'nodeType': 'TupleExpression', - 'src': '4151:106:1', + 'src': '4486:106:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'functionReturnParameters': 176, - 'id': 199, + 'functionReturnParameters': 211, + 'id': 234, 'nodeType': 'Return', - 'src': '4144:113:1' + 'src': '4479:113:1' } ] }, 'documentation': null, - 'id': 201, + 'id': 236, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'isSubscriptionActive', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 173, + 'id': 208, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 170, + 'id': 205, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 201, - 'src': '3913:24:1', + 'scope': 236, + 'src': '4248:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -11012,10 +11951,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 169, + 'id': 204, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '3913:7:1', + 'src': '4248:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -11026,11 +11965,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 172, + 'id': 207, 'name': 'gracePeriodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 201, - 'src': '3947:26:1', + 'scope': 236, + 'src': '4282:26:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -11038,10 +11977,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 171, + 'id': 206, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '3947:7:1', + 'src': '4282:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -11051,19 +11990,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '3903:76:1' + 'src': '4238:76:1' }, 'returnParameters': { - 'id': 176, + 'id': 211, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 175, + 'id': 210, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 201, - 'src': '4027:4:1', + 'scope': 236, + 'src': '4362:4:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -11071,10 +12010,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 174, + 'id': 209, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '4027:4:1', + 'src': '4362:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11084,19 +12023,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '4026:6:1' + 'src': '4361:6:1' }, - 'scope': 675, - 'src': '3874:390:1', + 'scope': 710, + 'src': '4209:390:1', 'stateMutability': 'view', 'superFunction': null, 'visibility': 'external' }, { 'body': { - 'id': 300, + 'id': 335, 'nodeType': 'Block', - 'src': '4969:999:1', + 'src': '5304:999:1', 'statements': [ { 'expression': { @@ -11108,7 +12047,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 229, + 'id': 264, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11119,19 +12058,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 225, + 'id': 260, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 221, + 'id': 256, 'name': 'requiredToAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 73, - 'src': '5093:17:1', + 'referencedDeclaration': 75, + 'src': '5428:17:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -11145,14 +12084,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30', - 'id': 223, + 'id': 258, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5122:1:1', + 'src': '5457:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -11168,20 +12107,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 0' } ], - 'id': 222, + 'id': 257, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5114:7:1', + 'src': '5449:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 224, + 'id': 259, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -11189,13 +12128,13 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5114:10:1', + 'src': '5449:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '5093:31:1', + 'src': '5428:31:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11209,19 +12148,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 228, + 'id': 263, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 226, + 'id': 261, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 205, - 'src': '5128:2:1', + 'referencedDeclaration': 240, + 'src': '5463:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -11231,24 +12170,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 227, + 'id': 262, 'name': 'requiredToAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 73, - 'src': '5134:17:1', + 'referencedDeclaration': 75, + 'src': '5469:17:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '5128:23:1', + 'src': '5463:23:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5093:58:1', + 'src': '5428:58:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11257,14 +12196,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564546f41646472657373204661696c757265', - 'id': 230, + 'id': 265, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5153:27:1', + 'src': '5488:27:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430', @@ -11284,21 +12223,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredToAddress Failure\'' } ], - 'id': 220, + 'id': 255, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5084:7:1', + 'referencedDeclaration': 1390, + 'src': '5419:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 231, + 'id': 266, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11306,15 +12245,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5084:98:1', + 'src': '5419:98:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 232, + 'id': 267, 'nodeType': 'ExpressionStatement', - 'src': '5084:98:1' + 'src': '5419:98:1' }, { 'expression': { @@ -11326,7 +12265,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 242, + 'id': 277, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11337,19 +12276,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 238, + 'id': 273, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 234, + 'id': 269, 'name': 'requiredTokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 75, - 'src': '5201:20:1', + 'referencedDeclaration': 77, + 'src': '5536:20:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -11363,14 +12302,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30', - 'id': 236, + 'id': 271, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5233:1:1', + 'src': '5568:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -11386,20 +12325,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 0' } ], - 'id': 235, + 'id': 270, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5225:7:1', + 'src': '5560:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 237, + 'id': 272, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -11407,13 +12346,13 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5225:10:1', + 'src': '5560:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '5201:34:1', + 'src': '5536:34:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11427,19 +12366,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 241, + 'id': 276, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 239, + 'id': 274, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 207, - 'src': '5239:12:1', + 'referencedDeclaration': 242, + 'src': '5574:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -11449,24 +12388,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 240, + 'id': 275, 'name': 'requiredTokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 75, - 'src': '5255:20:1', + 'referencedDeclaration': 77, + 'src': '5590:20:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '5239:36:1', + 'src': '5574:36:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5201:74:1', + 'src': '5536:74:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11475,14 +12414,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564546f6b656e41646472657373204661696c757265', - 'id': 243, + 'id': 278, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5277:30:1', + 'src': '5612:30:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c', @@ -11502,21 +12441,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredTokenAddress Failure\'' } ], - 'id': 233, + 'id': 268, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5192:7:1', + 'referencedDeclaration': 1390, + 'src': '5527:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 244, + 'id': 279, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11524,15 +12463,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5192:118:1', + 'src': '5527:118:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 245, + 'id': 280, 'nodeType': 'ExpressionStatement', - 'src': '5192:118:1' + 'src': '5527:118:1' }, { 'expression': { @@ -11544,7 +12483,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 253, + 'id': 288, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11555,19 +12494,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 249, + 'id': 284, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 247, + 'id': 282, 'name': 'requiredTokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 77, - 'src': '5329:19:1', + 'referencedDeclaration': 79, + 'src': '5664:19:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -11578,14 +12517,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 248, + 'id': 283, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5352:1:1', + 'src': '5687:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -11593,7 +12532,7 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '5329:24:1', + 'src': '5664:24:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11607,19 +12546,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 252, + 'id': 287, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 250, + 'id': 285, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 209, - 'src': '5357:11:1', + 'referencedDeclaration': 244, + 'src': '5692:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -11629,24 +12568,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 251, + 'id': 286, 'name': 'requiredTokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 77, - 'src': '5372:19:1', + 'referencedDeclaration': 79, + 'src': '5707:19:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '5357:34:1', + 'src': '5692:34:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5329:62:1', + 'src': '5664:62:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11655,14 +12594,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564546f6b656e416d6f756e74204661696c757265', - 'id': 254, + 'id': 289, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5393:29:1', + 'src': '5728:29:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785', @@ -11682,21 +12621,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredTokenAmount Failure\'' } ], - 'id': 246, + 'id': 281, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5320:7:1', + 'referencedDeclaration': 1390, + 'src': '5655:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 255, + 'id': 290, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11704,15 +12643,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5320:105:1', + 'src': '5655:105:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 256, + 'id': 291, 'nodeType': 'ExpressionStatement', - 'src': '5320:105:1' + 'src': '5655:105:1' }, { 'expression': { @@ -11724,7 +12663,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 264, + 'id': 299, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11735,19 +12674,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 260, + 'id': 295, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 258, + 'id': 293, 'name': 'requiredPeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 79, - 'src': '5444:21:1', + 'referencedDeclaration': 81, + 'src': '5779:21:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -11758,14 +12697,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 259, + 'id': 294, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5469:1:1', + 'src': '5804:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -11773,7 +12712,7 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '5444:26:1', + 'src': '5779:26:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11787,19 +12726,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 263, + 'id': 298, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 261, + 'id': 296, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 211, - 'src': '5474:13:1', + 'referencedDeclaration': 246, + 'src': '5809:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -11809,24 +12748,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 262, + 'id': 297, 'name': 'requiredPeriodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 79, - 'src': '5491:21:1', + 'referencedDeclaration': 81, + 'src': '5826:21:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '5474:38:1', + 'src': '5809:38:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5444:68:1', + 'src': '5779:68:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11835,14 +12774,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '7265717569726564506572696f645365636f6e6473204661696c757265', - 'id': 265, + 'id': 300, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5514:31:1', + 'src': '5849:31:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b', @@ -11862,21 +12801,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredPeriodSeconds Failure\'' } ], - 'id': 257, + 'id': 292, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5435:7:1', + 'referencedDeclaration': 1390, + 'src': '5770:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 266, + 'id': 301, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11884,15 +12823,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5435:113:1', + 'src': '5770:113:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 267, + 'id': 302, 'nodeType': 'ExpressionStatement', - 'src': '5435:113:1' + 'src': '5770:113:1' }, { 'expression': { @@ -11904,7 +12843,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 275, + 'id': 310, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -11915,19 +12854,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 271, + 'id': 306, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 269, + 'id': 304, 'name': 'requiredGasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 81, - 'src': '5567:16:1', + 'referencedDeclaration': 83, + 'src': '5902:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -11938,14 +12877,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 270, + 'id': 305, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5587:1:1', + 'src': '5922:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -11953,7 +12892,7 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '5567:21:1', + 'src': '5902:21:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -11967,19 +12906,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 274, + 'id': 309, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 272, + 'id': 307, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 213, - 'src': '5592:8:1', + 'referencedDeclaration': 248, + 'src': '5927:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -11989,24 +12928,24 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 273, + 'id': 308, 'name': 'requiredGasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 81, - 'src': '5604:16:1', + 'referencedDeclaration': 83, + 'src': '5939:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '5592:28:1', + 'src': '5927:28:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '5567:53:1', + 'src': '5902:53:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -12015,14 +12954,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '72657175697265644761735072696365204661696c757265', - 'id': 276, + 'id': 311, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5622:26:1', + 'src': '5957:26:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb', @@ -12042,21 +12981,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'requiredGasPrice Failure\'' } ], - 'id': 268, + 'id': 303, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '5558:7:1', + 'referencedDeclaration': 1390, + 'src': '5893:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 277, + 'id': 312, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -12064,15 +13003,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5558:93:1', + 'src': '5893:93:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 278, + 'id': 313, 'nodeType': 'ExpressionStatement', - 'src': '5558:93:1' + 'src': '5893:93:1' }, { 'expression': { @@ -12087,14 +13026,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30783139', - 'id': 283, + 'id': 318, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5731:4:1', + 'src': '6066:4:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_25_by_1', @@ -12110,20 +13049,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 25' } ], - 'id': 282, + 'id': 317, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5726:4:1', + 'src': '6061:4:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_bytes1_$', 'typeString': 'type(bytes1)' }, 'typeName': 'byte' }, - 'id': 284, + 'id': 319, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -12131,7 +13070,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5726:10:1', + 'src': '6061:10:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes1', 'typeString': 'bytes1' @@ -12143,14 +13082,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '30', - 'id': 286, + 'id': 321, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '5759:1:1', + 'src': '6094:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -12166,20 +13105,20 @@ let compiledSubscription1 = { 'typeString': 'int_const 0' } ], - 'id': 285, + 'id': 320, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5754:4:1', + 'src': '6089:4:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_bytes1_$', 'typeString': 'type(bytes1)' }, 'typeName': 'byte' }, - 'id': 287, + 'id': 322, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -12187,7 +13126,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5754:7:1', + 'src': '6089:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes1', 'typeString': 'bytes1' @@ -12198,14 +13137,14 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 289, + 'id': 324, 'name': 'this', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1374, - 'src': '5787:4:1', + 'referencedDeclaration': 1409, + 'src': '6122:4:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } } @@ -12213,24 +13152,24 @@ let compiledSubscription1 = { 'expression': { 'argumentTypes': [ { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } ], - 'id': 288, + 'id': 323, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '5779:7:1', + 'src': '6114:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 290, + 'id': 325, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -12238,7 +13177,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5779:13:1', + 'src': '6114:13:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -12246,12 +13185,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 291, + 'id': 326, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 203, - 'src': '5810:4:1', + 'referencedDeclaration': 238, + 'src': '6145:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -12259,12 +13198,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 292, + 'id': 327, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 205, - 'src': '5832:2:1', + 'referencedDeclaration': 240, + 'src': '6167:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -12272,12 +13211,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 293, + 'id': 328, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 207, - 'src': '5852:12:1', + 'referencedDeclaration': 242, + 'src': '6187:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -12285,12 +13224,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 294, + 'id': 329, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 209, - 'src': '5882:11:1', + 'referencedDeclaration': 244, + 'src': '6217:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12298,12 +13237,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 295, + 'id': 330, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 211, - 'src': '5911:13:1', + 'referencedDeclaration': 246, + 'src': '6246:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12311,12 +13250,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 296, + 'id': 331, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 213, - 'src': '5942:8:1', + 'referencedDeclaration': 248, + 'src': '6277:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12364,18 +13303,18 @@ let compiledSubscription1 = { ], 'expression': { 'argumentTypes': null, - 'id': 280, + 'id': 315, 'name': 'abi', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1338, - 'src': '5692:3:1', + 'referencedDeclaration': 1373, + 'src': '6027:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_abi', 'typeString': 'abi' } }, - 'id': 281, + 'id': 316, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -12383,13 +13322,13 @@ let compiledSubscription1 = { 'memberName': 'encodePacked', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '5692:16:1', + 'src': '6027:16:1', 'typeDescriptions': { 'typeIdentifier': 't_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$', 'typeString': 'function () pure returns (bytes memory)' } }, - 'id': 297, + 'id': 332, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -12397,7 +13336,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5692:268:1', + 'src': '6027:268:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -12411,18 +13350,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 279, + 'id': 314, 'name': 'keccak256', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1345, - 'src': '5669:9:1', + 'referencedDeclaration': 1380, + 'src': '6004:9:1', 'typeDescriptions': { 'typeIdentifier': 't_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$', 'typeString': 'function (bytes memory) pure returns (bytes32)' } }, - 'id': 298, + 'id': 333, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -12430,37 +13369,37 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '5669:292:1', + 'src': '6004:292:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, - 'functionReturnParameters': 219, - 'id': 299, + 'functionReturnParameters': 254, + 'id': 334, 'nodeType': 'Return', - 'src': '5662:299:1' + 'src': '5997:299:1' } ] }, 'documentation': null, - 'id': 301, + 'id': 336, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'getSubscriptionHash', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 216, + 'id': 251, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 203, + 'id': 238, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4458:12:1', + 'scope': 336, + 'src': '4793:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12468,10 +13407,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 202, + 'id': 237, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '4458:7:1', + 'src': '4793:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -12483,11 +13422,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 205, + 'id': 240, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4497:10:1', + 'scope': 336, + 'src': '4832:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12495,10 +13434,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 204, + 'id': 239, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '4497:7:1', + 'src': '4832:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -12510,11 +13449,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 207, + 'id': 242, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4533:20:1', + 'scope': 336, + 'src': '4868:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12522,10 +13461,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 206, + 'id': 241, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '4533:7:1', + 'src': '4868:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -12537,11 +13476,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 209, + 'id': 244, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4605:19:1', + 'scope': 336, + 'src': '4940:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12549,10 +13488,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 208, + 'id': 243, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4605:7:1', + 'src': '4940:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12563,11 +13502,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 211, + 'id': 246, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4675:21:1', + 'scope': 336, + 'src': '5010:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12575,10 +13514,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 210, + 'id': 245, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4675:7:1', + 'src': '5010:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12589,11 +13528,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 213, + 'id': 248, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4747:16:1', + 'scope': 336, + 'src': '5082:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12601,10 +13540,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 212, + 'id': 247, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4747:7:1', + 'src': '5082:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12615,11 +13554,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 215, + 'id': 250, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4831:13:1', + 'scope': 336, + 'src': '5166:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12627,10 +13566,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 214, + 'id': 249, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '4831:7:1', + 'src': '5166:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12640,19 +13579,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '4448:462:1' + 'src': '4783:462:1' }, 'returnParameters': { - 'id': 219, + 'id': 254, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 218, + 'id': 253, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 301, - 'src': '4956:7:1', + 'scope': 336, + 'src': '5291:7:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12660,10 +13599,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 217, + 'id': 252, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '4956:7:1', + 'src': '5291:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -12673,19 +13612,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '4955:9:1' + 'src': '5290:9:1' }, - 'scope': 675, - 'src': '4420:1548:1', + 'scope': 710, + 'src': '4755:1548:1', 'stateMutability': 'view', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 317, + 'id': 352, 'nodeType': 'Block', - 'src': '6263:84:1', + 'src': '6598:84:1', 'statements': [ { 'expression': { @@ -12693,12 +13632,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 314, + 'id': 349, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 305, - 'src': '6330:9:1', + 'referencedDeclaration': 340, + 'src': '6665:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -12719,32 +13658,32 @@ let compiledSubscription1 = { 'argumentTypes': [], 'expression': { 'argumentTypes': null, - 'id': 310, + 'id': 345, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 303, - 'src': '6280:16:1', + 'referencedDeclaration': 338, + 'src': '6615:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, - 'id': 311, + 'id': 346, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'toEthSignedMessageHash', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 755, - 'src': '6280:39:1', + 'referencedDeclaration': 790, + 'src': '6615:39:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$', 'typeString': 'function (bytes32) pure returns (bytes32)' } }, - 'id': 312, + 'id': 347, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -12752,27 +13691,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '6280:41:1', + 'src': '6615:41:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, - 'id': 313, + 'id': 348, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'recover', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 739, - 'src': '6280:49:1', + 'referencedDeclaration': 774, + 'src': '6615:49:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$', 'typeString': 'function (bytes32,bytes memory) pure returns (address)' } }, - 'id': 315, + 'id': 350, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -12780,37 +13719,37 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '6280:60:1', + 'src': '6615:60:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'functionReturnParameters': 309, - 'id': 316, + 'functionReturnParameters': 344, + 'id': 351, 'nodeType': 'Return', - 'src': '6273:67:1' + 'src': '6608:67:1' } ] }, 'documentation': null, - 'id': 318, + 'id': 353, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'getSubscriptionSigner', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 306, + 'id': 341, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 303, + 'id': 338, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 318, - 'src': '6069:24:1', + 'scope': 353, + 'src': '6404:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12818,10 +13757,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 302, + 'id': 337, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '6069:7:1', + 'src': '6404:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -12832,11 +13771,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 305, + 'id': 340, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 318, - 'src': '6126:22:1', + 'scope': 353, + 'src': '6461:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -12844,10 +13783,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 304, + 'id': 339, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '6126:5:1', + 'src': '6461:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -12857,19 +13796,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '6059:145:1' + 'src': '6394:145:1' }, 'returnParameters': { - 'id': 309, + 'id': 344, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 308, + 'id': 343, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 318, - 'src': '6250:7:1', + 'scope': 353, + 'src': '6585:7:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12877,10 +13816,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 307, + 'id': 342, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6250:7:1', + 'src': '6585:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -12891,32 +13830,32 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '6249:9:1' + 'src': '6584:9:1' }, - 'scope': 675, - 'src': '6029:318:1', + 'scope': 710, + 'src': '6364:318:1', 'stateMutability': 'pure', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 409, + 'id': 444, 'nodeType': 'Block', - 'src': '7098:633:1', + 'src': '7433:633:1', 'statements': [ { 'assignments': [ - 340 + 375 ], 'declarations': [ { 'constant': false, - 'id': 340, + 'id': 375, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7108:24:1', + 'scope': 444, + 'src': '7443:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -12924,10 +13863,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 339, + 'id': 374, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '7108:7:1', + 'src': '7443:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -12937,18 +13876,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 350, + 'id': 385, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 342, + 'id': 377, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7168:4:1', + 'referencedDeclaration': 355, + 'src': '7503:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -12956,12 +13895,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 343, + 'id': 378, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 322, - 'src': '7174:2:1', + 'referencedDeclaration': 357, + 'src': '7509:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -12969,12 +13908,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 344, + 'id': 379, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 324, - 'src': '7178:12:1', + 'referencedDeclaration': 359, + 'src': '7513:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -12982,12 +13921,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 345, + 'id': 380, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 326, - 'src': '7192:11:1', + 'referencedDeclaration': 361, + 'src': '7527:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -12995,12 +13934,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 346, + 'id': 381, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 328, - 'src': '7205:13:1', + 'referencedDeclaration': 363, + 'src': '7540:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13008,12 +13947,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 347, + 'id': 382, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 330, - 'src': '7220:8:1', + 'referencedDeclaration': 365, + 'src': '7555:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13021,12 +13960,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 348, + 'id': 383, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 332, - 'src': '7230:5:1', + 'referencedDeclaration': 367, + 'src': '7565:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13064,18 +14003,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 341, + 'id': 376, 'name': 'getSubscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 301, - 'src': '7135:19:1', + 'referencedDeclaration': 336, + 'src': '7470:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' } }, - 'id': 349, + 'id': 384, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13083,27 +14022,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7135:110:1', + 'src': '7470:110:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7108:137:1' + 'src': '7443:137:1' }, { 'assignments': [ - 352 + 387 ], 'declarations': [ { 'constant': false, - 'id': 352, + 'id': 387, 'name': 'signer', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7255:14:1', + 'scope': 444, + 'src': '7590:14:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -13111,10 +14050,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 351, + 'id': 386, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '7255:7:1', + 'src': '7590:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -13125,18 +14064,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 357, + 'id': 392, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 354, + 'id': 389, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 340, - 'src': '7294:16:1', + 'referencedDeclaration': 375, + 'src': '7629:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -13144,12 +14083,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 355, + 'id': 390, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 334, - 'src': '7312:9:1', + 'referencedDeclaration': 369, + 'src': '7647:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -13167,18 +14106,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 353, + 'id': 388, 'name': 'getSubscriptionSigner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 318, - 'src': '7272:21:1', + 'referencedDeclaration': 353, + 'src': '7607:21:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', 'typeString': 'function (bytes32,bytes memory) pure returns (address)' } }, - 'id': 356, + 'id': 391, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13186,27 +14125,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7272:50:1', + 'src': '7607:50:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7255:67:1' + 'src': '7590:67:1' }, { 'assignments': [ - 359 + 394 ], 'declarations': [ { 'constant': false, - 'id': 359, + 'id': 394, 'name': 'allowance', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7332:17:1', + 'scope': 444, + 'src': '7667:17:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -13214,10 +14153,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 358, + 'id': 393, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '7332:7:1', + 'src': '7667:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13227,18 +14166,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 369, + 'id': 404, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 364, + 'id': 399, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7382:4:1', + 'referencedDeclaration': 355, + 'src': '7717:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -13249,14 +14188,14 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 366, + 'id': 401, 'name': 'this', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1374, - 'src': '7396:4:1', + 'referencedDeclaration': 1409, + 'src': '7731:4:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } } @@ -13264,24 +14203,24 @@ let compiledSubscription1 = { 'expression': { 'argumentTypes': [ { - 'typeIdentifier': 't_contract$_Subscription_$675', + 'typeIdentifier': 't_contract$_Subscription_$710', 'typeString': 'contract Subscription' } ], - 'id': 365, + 'id': 400, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '7388:7:1', + 'src': '7723:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_address_$', 'typeString': 'type(address)' }, 'typeName': 'address' }, - 'id': 367, + 'id': 402, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13289,7 +14228,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7388:13:1', + 'src': '7723:13:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -13312,12 +14251,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 361, + 'id': 396, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 324, - 'src': '7358:12:1', + 'referencedDeclaration': 359, + 'src': '7693:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -13331,18 +14270,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 360, + 'id': 395, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '7352:5:1', + 'referencedDeclaration': 1302, + 'src': '7687:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 362, + 'id': 397, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13350,27 +14289,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7352:19:1', + 'src': '7687:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 363, + 'id': 398, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'allowance', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 941, - 'src': '7352:29:1', + 'referencedDeclaration': 976, + 'src': '7687:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address,address) view external returns (uint256)' } }, - 'id': 368, + 'id': 403, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13378,27 +14317,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7352:50:1', + 'src': '7687:50:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7332:70:1' + 'src': '7667:70:1' }, { 'assignments': [ - 371 + 406 ], 'declarations': [ { 'constant': false, - 'id': 371, + 'id': 406, 'name': 'balance', 'nodeType': 'VariableDeclaration', - 'scope': 409, - 'src': '7412:15:1', + 'scope': 444, + 'src': '7747:15:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -13406,10 +14345,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 370, + 'id': 405, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '7412:7:1', + 'src': '7747:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13419,18 +14358,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 378, + 'id': 413, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 376, + 'id': 411, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7460:4:1', + 'referencedDeclaration': 355, + 'src': '7795:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -13449,12 +14388,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 373, + 'id': 408, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 324, - 'src': '7436:12:1', + 'referencedDeclaration': 359, + 'src': '7771:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -13468,18 +14407,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 372, + 'id': 407, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '7430:5:1', + 'referencedDeclaration': 1302, + 'src': '7765:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 374, + 'id': 409, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13487,27 +14426,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7430:19:1', + 'src': '7765:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 375, + 'id': 410, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'balanceOf', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 925, - 'src': '7430:29:1', + 'referencedDeclaration': 960, + 'src': '7765:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address) view external returns (uint256)' } }, - 'id': 377, + 'id': 412, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13515,14 +14454,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7430:35:1', + 'src': '7765:35:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '7412:53:1' + 'src': '7747:53:1' }, { 'expression': { @@ -13534,7 +14473,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 406, + 'id': 441, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13545,7 +14484,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 399, + 'id': 434, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13556,7 +14495,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 392, + 'id': 427, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13567,7 +14506,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_bool', 'typeString': 'bool' }, - 'id': 385, + 'id': 420, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13578,19 +14517,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 381, + 'id': 416, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 379, + 'id': 414, 'name': 'signer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 352, - 'src': '7497:6:1', + 'referencedDeclaration': 387, + 'src': '7832:6:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -13600,18 +14539,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 380, + 'id': 415, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7507:4:1', + 'referencedDeclaration': 355, + 'src': '7842:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '7497:14:1', + 'src': '7832:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -13625,19 +14564,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 384, + 'id': 419, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 382, + 'id': 417, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 320, - 'src': '7527:4:1', + 'referencedDeclaration': 355, + 'src': '7862:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -13647,24 +14586,24 @@ let compiledSubscription1 = { 'operator': '!=', 'rightExpression': { 'argumentTypes': null, - 'id': 383, + 'id': 418, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 322, - 'src': '7535:2:1', + 'referencedDeclaration': 357, + 'src': '7870:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '7527:10:1', + 'src': '7862:10:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:40:1', + 'src': '7832:40:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -13678,7 +14617,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 391, + 'id': 426, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13687,18 +14626,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 386, + 'id': 421, 'name': 'block', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1341, - 'src': '7553:5:1', + 'referencedDeclaration': 1376, + 'src': '7888:5:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_block', 'typeString': 'block' } }, - 'id': 387, + 'id': 422, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13706,7 +14645,7 @@ let compiledSubscription1 = { 'memberName': 'timestamp', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '7553:15:1', + 'src': '7888:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13718,26 +14657,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 388, + 'id': 423, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '7572:18:1', + 'referencedDeclaration': 87, + 'src': '7907:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 390, + 'id': 425, 'indexExpression': { 'argumentTypes': null, - 'id': 389, + 'id': 424, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 340, - 'src': '7591:16:1', + 'referencedDeclaration': 375, + 'src': '7926:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -13748,19 +14687,19 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '7572:36:1', + 'src': '7907:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '7553:55:1', + 'src': '7888:55:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:111:1', + 'src': '7832:111:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -13774,19 +14713,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 398, + 'id': 433, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 393, + 'id': 428, 'name': 'allowance', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 359, - 'src': '7624:9:1', + 'referencedDeclaration': 394, + 'src': '7959:9:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13799,12 +14738,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 396, + 'id': 431, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 330, - 'src': '7653:8:1', + 'referencedDeclaration': 365, + 'src': '7988:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13820,32 +14759,32 @@ let compiledSubscription1 = { ], 'expression': { 'argumentTypes': null, - 'id': 394, + 'id': 429, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 326, - 'src': '7637:11:1', + 'referencedDeclaration': 361, + 'src': '7972:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 395, + 'id': 430, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '7637:15:1', + 'referencedDeclaration': 898, + 'src': '7972:15:1', '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': 397, + 'id': 432, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13853,19 +14792,19 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7637:25:1', + 'src': '7972:25:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '7624:38:1', + 'src': '7959:38:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:165:1', + 'src': '7832:165:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -13879,19 +14818,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 405, + 'id': 440, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 400, + 'id': 435, 'name': 'balance', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 371, - 'src': '7678:7:1', + 'referencedDeclaration': 406, + 'src': '8013:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13904,12 +14843,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 403, + 'id': 438, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 330, - 'src': '7705:8:1', + 'referencedDeclaration': 365, + 'src': '8040:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -13925,32 +14864,32 @@ let compiledSubscription1 = { ], 'expression': { 'argumentTypes': null, - 'id': 401, + 'id': 436, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 326, - 'src': '7689:11:1', + 'referencedDeclaration': 361, + 'src': '8024:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 402, + 'id': 437, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '7689:15:1', + 'referencedDeclaration': 898, + 'src': '8024:15:1', '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': 404, + 'id': 439, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -13958,63 +14897,63 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '7689:25:1', + 'src': '8024:25:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '7678:36:1', + 'src': '8013:36:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'src': '7497:217:1', + 'src': '7832:217:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } } ], - 'id': 407, + 'id': 442, 'isConstant': false, 'isInlineArray': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'nodeType': 'TupleExpression', - 'src': '7483:241:1', + 'src': '7818:241:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'functionReturnParameters': 338, - 'id': 408, + 'functionReturnParameters': 373, + 'id': 443, 'nodeType': 'Return', - 'src': '7476:248:1' + 'src': '7811:248:1' } ] }, 'documentation': null, - 'id': 410, + 'id': 445, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'isSubscriptionReady', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 335, + 'id': 370, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 320, + 'id': 355, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6508:12:1', + 'scope': 445, + 'src': '6843:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14022,10 +14961,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 319, + 'id': 354, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6508:7:1', + 'src': '6843:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -14037,11 +14976,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 322, + 'id': 357, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6547:10:1', + 'scope': 445, + 'src': '6882:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14049,10 +14988,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 321, + 'id': 356, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6547:7:1', + 'src': '6882:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -14064,11 +15003,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 324, + 'id': 359, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6583:20:1', + 'scope': 445, + 'src': '6918:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14076,10 +15015,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 323, + 'id': 358, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '6583:7:1', + 'src': '6918:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -14091,11 +15030,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 326, + 'id': 361, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6655:19:1', + 'scope': 445, + 'src': '6990:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14103,10 +15042,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 325, + 'id': 360, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6655:7:1', + 'src': '6990:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14117,11 +15056,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 328, + 'id': 363, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6725:21:1', + 'scope': 445, + 'src': '7060:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14129,10 +15068,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 327, + 'id': 362, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6725:7:1', + 'src': '7060:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14143,11 +15082,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 330, + 'id': 365, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6797:16:1', + 'scope': 445, + 'src': '7132:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14155,10 +15094,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 329, + 'id': 364, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6797:7:1', + 'src': '7132:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14169,11 +15108,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 332, + 'id': 367, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6882:13:1', + 'scope': 445, + 'src': '7217:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14181,10 +15120,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 331, + 'id': 366, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '6882:7:1', + 'src': '7217:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14195,11 +15134,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 334, + 'id': 369, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '6964:22:1', + 'scope': 445, + 'src': '7299:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -14207,10 +15146,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 333, + 'id': 368, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '6964:5:1', + 'src': '7299:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -14220,19 +15159,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '6498:544:1' + 'src': '6833:544:1' }, 'returnParameters': { - 'id': 338, + 'id': 373, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 337, + 'id': 372, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 410, - 'src': '7088:4:1', + 'scope': 445, + 'src': '7423:4:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14240,10 +15179,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 336, + 'id': 371, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '7088:4:1', + 'src': '7423:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -14253,32 +15192,32 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '7087:6:1' + 'src': '7422:6:1' }, - 'scope': 675, - 'src': '6470:1261:1', + 'scope': 710, + 'src': '6805:1261:1', 'stateMutability': 'view', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 486, + 'id': 521, 'nodeType': 'Block', - 'src': '8606:802:1', + 'src': '8941:802:1', 'statements': [ { 'assignments': [ - 432 + 467 ], 'declarations': [ { 'constant': false, - 'id': 432, + 'id': 467, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 486, - 'src': '8616:24:1', + 'scope': 521, + 'src': '8951:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14286,10 +15225,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 431, + 'id': 466, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '8616:7:1', + 'src': '8951:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -14299,18 +15238,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 442, + 'id': 477, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 434, + 'id': 469, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '8676:4:1', + 'referencedDeclaration': 447, + 'src': '9011:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14318,12 +15257,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 435, + 'id': 470, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 414, - 'src': '8682:2:1', + 'referencedDeclaration': 449, + 'src': '9017:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14331,12 +15270,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 436, + 'id': 471, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 416, - 'src': '8686:12:1', + 'referencedDeclaration': 451, + 'src': '9021:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14344,12 +15283,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 437, + 'id': 472, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 418, - 'src': '8700:11:1', + 'referencedDeclaration': 453, + 'src': '9035:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14357,12 +15296,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 438, + 'id': 473, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 420, - 'src': '8713:13:1', + 'referencedDeclaration': 455, + 'src': '9048:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14370,12 +15309,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 439, + 'id': 474, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 422, - 'src': '8728:8:1', + 'referencedDeclaration': 457, + 'src': '9063:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14383,12 +15322,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 440, + 'id': 475, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 424, - 'src': '8738:5:1', + 'referencedDeclaration': 459, + 'src': '9073:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14426,18 +15365,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 433, + 'id': 468, 'name': 'getSubscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 301, - 'src': '8643:19:1', + 'referencedDeclaration': 336, + 'src': '8978:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' } }, - 'id': 441, + 'id': 476, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -14445,27 +15384,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '8643:110:1', + 'src': '8978:110:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '8616:137:1' + 'src': '8951:137:1' }, { 'assignments': [ - 444 + 479 ], 'declarations': [ { 'constant': false, - 'id': 444, + 'id': 479, 'name': 'signer', 'nodeType': 'VariableDeclaration', - 'scope': 486, - 'src': '8763:14:1', + 'scope': 521, + 'src': '9098:14:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -14473,10 +15412,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 443, + 'id': 478, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8763:7:1', + 'src': '9098:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -14487,18 +15426,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 449, + 'id': 484, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 446, + 'id': 481, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 432, - 'src': '8802:16:1', + 'referencedDeclaration': 467, + 'src': '9137:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -14506,12 +15445,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 447, + 'id': 482, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 426, - 'src': '8820:9:1', + 'referencedDeclaration': 461, + 'src': '9155:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -14529,18 +15468,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 445, + 'id': 480, 'name': 'getSubscriptionSigner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 318, - 'src': '8780:21:1', + 'referencedDeclaration': 353, + 'src': '9115:21:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$', 'typeString': 'function (bytes32,bytes memory) pure returns (address)' } }, - 'id': 448, + 'id': 483, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -14548,14 +15487,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '8780:50:1', + 'src': '9115:50:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '8763:67:1' + 'src': '9098:67:1' }, { 'expression': { @@ -14567,19 +15506,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 453, + 'id': 488, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 451, + 'id': 486, 'name': 'signer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 444, - 'src': '8887:6:1', + 'referencedDeclaration': 479, + 'src': '9222:6:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14589,18 +15528,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 452, + 'id': 487, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '8897:4:1', + 'referencedDeclaration': 447, + 'src': '9232:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '8887:14:1', + 'src': '9222:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -14609,14 +15548,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e', - 'id': 454, + 'id': 489, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '8903:49:1', + 'src': '9238:49:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b', @@ -14636,21 +15575,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Invalid Signature for subscription cancellation\'' } ], - 'id': 450, + 'id': 485, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '8879:7:1', + 'referencedDeclaration': 1390, + 'src': '9214:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 455, + 'id': 490, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -14658,15 +15597,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '8879:74:1', + 'src': '9214:74:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 456, + 'id': 491, 'nodeType': 'ExpressionStatement', - 'src': '8879:74:1' + 'src': '9214:74:1' }, { 'expression': { @@ -14678,19 +15617,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 461, + 'id': 496, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 458, + 'id': 493, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '9012:4:1', + 'referencedDeclaration': 447, + 'src': '9347:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14702,18 +15641,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 459, + 'id': 494, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '9020:3:1', + 'referencedDeclaration': 1386, + 'src': '9355:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 460, + 'id': 495, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -14721,13 +15660,13 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '9020:10:1', + 'src': '9355:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '9012:18:1', + 'src': '9347:18:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -14736,14 +15675,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '6d73672e73656e646572206973206e6f74207468652073756273637269626572', - 'id': 462, + 'id': 497, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '9032:34:1', + 'src': '9367:34:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79', @@ -14763,21 +15702,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'msg.sender is not the subscriber\'' } ], - 'id': 457, + 'id': 492, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '9004:7:1', + 'referencedDeclaration': 1390, + 'src': '9339:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 463, + 'id': 498, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -14785,20 +15724,20 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '9004:63:1', + 'src': '9339:63:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 464, + 'id': 499, 'nodeType': 'ExpressionStatement', - 'src': '9004:63:1' + 'src': '9339:63:1' }, { 'expression': { 'argumentTypes': null, - 'id': 472, + 'id': 507, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -14807,26 +15746,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 465, + 'id': 500, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '9206:18:1', + 'referencedDeclaration': 87, + 'src': '9541:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 467, + 'id': 502, 'indexExpression': { 'argumentTypes': null, - 'id': 466, + 'id': 501, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 432, - 'src': '9225:16:1', + 'referencedDeclaration': 467, + 'src': '9560:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -14837,7 +15776,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': true, 'nodeType': 'IndexAccess', - 'src': '9206:36:1', + 'src': '9541:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14850,7 +15789,7 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 470, + 'id': 505, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -14858,18 +15797,18 @@ let compiledSubscription1 = { 'nodeType': 'UnaryOperation', 'operator': '-', 'prefix': true, - 'src': '9251:2:1', + 'src': '9586:2:1', 'subExpression': { 'argumentTypes': null, 'hexValue': '31', - 'id': 469, + 'id': 504, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '9252:1:1', + 'src': '9587:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_1_by_1', @@ -14890,20 +15829,20 @@ let compiledSubscription1 = { 'typeString': 'int_const -1' } ], - 'id': 468, + 'id': 503, 'isConstant': false, 'isLValue': false, 'isPure': true, 'lValueRequested': false, 'nodeType': 'ElementaryTypeNameExpression', - 'src': '9243:7:1', + 'src': '9578:7:1', 'typeDescriptions': { 'typeIdentifier': 't_type$_t_uint256_$', 'typeString': 'type(uint256)' }, 'typeName': 'uint256' }, - 'id': 471, + 'id': 506, 'isConstant': false, 'isLValue': false, 'isPure': true, @@ -14911,21 +15850,21 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '9243:11:1', + 'src': '9578:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '9206:48:1', + 'src': '9541:48:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 473, + 'id': 508, 'nodeType': 'ExpressionStatement', - 'src': '9206:48:1' + 'src': '9541:48:1' }, { 'eventCall': { @@ -14933,12 +15872,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 475, + 'id': 510, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 412, - 'src': '9302:4:1', + 'referencedDeclaration': 447, + 'src': '9637:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14946,12 +15885,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 476, + 'id': 511, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 414, - 'src': '9308:2:1', + 'referencedDeclaration': 449, + 'src': '9643:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14959,12 +15898,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 477, + 'id': 512, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 416, - 'src': '9312:12:1', + 'referencedDeclaration': 451, + 'src': '9647:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -14972,12 +15911,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 478, + 'id': 513, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 418, - 'src': '9326:11:1', + 'referencedDeclaration': 453, + 'src': '9661:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14985,12 +15924,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 479, + 'id': 514, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 420, - 'src': '9339:13:1', + 'referencedDeclaration': 455, + 'src': '9674:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -14998,12 +15937,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 480, + 'id': 515, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 422, - 'src': '9354:8:1', + 'referencedDeclaration': 457, + 'src': '9689:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15011,12 +15950,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 481, + 'id': 516, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 424, - 'src': '9364:5:1', + 'referencedDeclaration': 459, + 'src': '9699:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15054,18 +15993,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 474, + 'id': 509, 'name': 'CancelSubscription', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 121, - 'src': '9270:18:1', + 'referencedDeclaration': 123, + 'src': '9605:18:1', 'typeDescriptions': { 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' } }, - 'id': 482, + 'id': 517, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15073,28 +16012,28 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '9270:109:1', + 'src': '9605:109:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 483, + 'id': 518, 'nodeType': 'EmitStatement', - 'src': '9265:114:1' + 'src': '9600:114:1' }, { 'expression': { 'argumentTypes': null, 'hexValue': '74727565', - 'id': 484, + 'id': 519, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'bool', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '9397:4:1', + 'src': '9732:4:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_bool', @@ -15102,31 +16041,31 @@ let compiledSubscription1 = { }, 'value': 'true' }, - 'functionReturnParameters': 430, - 'id': 485, + 'functionReturnParameters': 465, + 'id': 520, 'nodeType': 'Return', - 'src': '9390:11:1' + 'src': '9725:11:1' } ] }, 'documentation': null, - 'id': 487, + 'id': 522, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'cancelSubscription', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 427, + 'id': 462, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 412, + 'id': 447, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8022:12:1', + 'scope': 522, + 'src': '8357:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15134,10 +16073,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 411, + 'id': 446, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8022:7:1', + 'src': '8357:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -15149,11 +16088,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 414, + 'id': 449, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8061:10:1', + 'scope': 522, + 'src': '8396:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15161,10 +16100,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 413, + 'id': 448, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8061:7:1', + 'src': '8396:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -15176,11 +16115,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 416, + 'id': 451, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8097:20:1', + 'scope': 522, + 'src': '8432:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15188,10 +16127,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 415, + 'id': 450, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '8097:7:1', + 'src': '8432:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -15203,11 +16142,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 418, + 'id': 453, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8169:19:1', + 'scope': 522, + 'src': '8504:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15215,10 +16154,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 417, + 'id': 452, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8169:7:1', + 'src': '8504:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15229,11 +16168,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 420, + 'id': 455, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8239:21:1', + 'scope': 522, + 'src': '8574:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15241,10 +16180,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 419, + 'id': 454, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8239:7:1', + 'src': '8574:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15255,11 +16194,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 422, + 'id': 457, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8311:16:1', + 'scope': 522, + 'src': '8646:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15267,10 +16206,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 421, + 'id': 456, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8311:7:1', + 'src': '8646:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15281,11 +16220,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 424, + 'id': 459, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8395:13:1', + 'scope': 522, + 'src': '8730:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15293,10 +16232,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 423, + 'id': 458, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '8395:7:1', + 'src': '8730:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15307,11 +16246,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 426, + 'id': 461, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8477:22:1', + 'scope': 522, + 'src': '8812:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -15319,10 +16258,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 425, + 'id': 460, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '8477:5:1', + 'src': '8812:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -15332,19 +16271,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '8012:543:1' + 'src': '8347:543:1' }, 'returnParameters': { - 'id': 430, + 'id': 465, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 429, + 'id': 464, 'name': 'success', 'nodeType': 'VariableDeclaration', - 'scope': 487, - 'src': '8588:12:1', + 'scope': 522, + 'src': '8923:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15352,10 +16291,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 428, + 'id': 463, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '8588:4:1', + 'src': '8923:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -15365,19 +16304,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '8587:14:1' + 'src': '8922:14:1' }, - 'scope': 675, - 'src': '7985:1423:1', + 'scope': 710, + 'src': '8320:1423:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 636, + 'id': 671, 'nodeType': 'Block', - 'src': '10189:2468:1', + 'src': '10524:2468:1', 'statements': [ { 'expression': { @@ -15389,7 +16328,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address', 'typeString': 'address' }, - 'id': 512, + 'id': 547, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15398,18 +16337,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 509, + 'id': 544, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '10207:3:1', + 'referencedDeclaration': 1386, + 'src': '10542:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 510, + 'id': 545, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15417,7 +16356,7 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '10207:10:1', + 'src': '10542:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -15427,18 +16366,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 511, + 'id': 546, 'name': 'relayer', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 71, - 'src': '10221:7:1', + 'referencedDeclaration': 73, + 'src': '10556:7:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' } }, - 'src': '10207:21:1', + 'src': '10542:21:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -15452,21 +16391,21 @@ let compiledSubscription1 = { 'typeString': 'bool' } ], - 'id': 508, + 'id': 543, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1354, - 'src': '10199:7:1', + 'referencedDeclaration': 1389, + 'src': '10534:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', 'typeString': 'function (bool) pure' } }, - 'id': 513, + 'id': 548, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15474,28 +16413,28 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10199:30:1', + 'src': '10534:30:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 514, + 'id': 549, 'nodeType': 'ExpressionStatement', - 'src': '10199:30:1' + 'src': '10534:30:1' }, { 'assignments': [ - 516 + 551 ], 'declarations': [ { 'constant': false, - 'id': 516, + 'id': 551, 'name': 'subscriptionHash', 'nodeType': 'VariableDeclaration', - 'scope': 636, - 'src': '10239:24:1', + 'scope': 671, + 'src': '10574:24:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -15503,10 +16442,10 @@ let compiledSubscription1 = { 'typeString': 'bytes32' }, 'typeName': { - 'id': 515, + 'id': 550, 'name': 'bytes32', 'nodeType': 'ElementaryTypeName', - 'src': '10239:7:1', + 'src': '10574:7:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -15516,18 +16455,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 526, + 'id': 561, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 518, + 'id': 553, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10299:4:1', + 'referencedDeclaration': 524, + 'src': '10634:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -15535,12 +16474,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 519, + 'id': 554, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '10305:2:1', + 'referencedDeclaration': 526, + 'src': '10640:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -15548,12 +16487,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 520, + 'id': 555, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '10309:12:1', + 'referencedDeclaration': 528, + 'src': '10644:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -15561,12 +16500,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 521, + 'id': 556, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '10323:11:1', + 'referencedDeclaration': 530, + 'src': '10658:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15574,12 +16513,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 522, + 'id': 557, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '10336:13:1', + 'referencedDeclaration': 532, + 'src': '10671:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15587,12 +16526,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 523, + 'id': 558, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '10351:8:1', + 'referencedDeclaration': 534, + 'src': '10686:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15600,12 +16539,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 524, + 'id': 559, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10361:5:1', + 'referencedDeclaration': 536, + 'src': '10696:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15643,18 +16582,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 517, + 'id': 552, 'name': 'getSubscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 301, - 'src': '10266:19:1', + 'referencedDeclaration': 336, + 'src': '10601:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)' } }, - 'id': 525, + 'id': 560, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15662,14 +16601,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10266:110:1', + 'src': '10601:110:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '10239:137:1' + 'src': '10574:137:1' }, { 'expression': { @@ -15680,12 +16619,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 529, + 'id': 564, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10473:4:1', + 'referencedDeclaration': 524, + 'src': '10808:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -15693,12 +16632,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 530, + 'id': 565, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '10479:2:1', + 'referencedDeclaration': 526, + 'src': '10814:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -15706,12 +16645,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 531, + 'id': 566, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '10483:12:1', + 'referencedDeclaration': 528, + 'src': '10818:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -15719,12 +16658,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 532, + 'id': 567, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '10497:11:1', + 'referencedDeclaration': 530, + 'src': '10832:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15732,12 +16671,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 533, + 'id': 568, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '10510:13:1', + 'referencedDeclaration': 532, + 'src': '10845:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15745,12 +16684,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 534, + 'id': 569, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '10525:8:1', + 'referencedDeclaration': 534, + 'src': '10860:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15758,12 +16697,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 535, + 'id': 570, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10535:5:1', + 'referencedDeclaration': 536, + 'src': '10870:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15771,12 +16710,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 536, + 'id': 571, 'name': 'signature', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 503, - 'src': '10542:9:1', + 'referencedDeclaration': 538, + 'src': '10877:9:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_memory_ptr', 'typeString': 'bytes memory' @@ -15818,18 +16757,18 @@ let compiledSubscription1 = { 'typeString': 'bytes memory' } ], - 'id': 528, + 'id': 563, 'name': 'isSubscriptionReady', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 410, - 'src': '10453:19:1', + 'referencedDeclaration': 445, + 'src': '10788:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)' } }, - 'id': 537, + 'id': 572, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15837,7 +16776,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10453:99:1', + 'src': '10788:99:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -15846,14 +16785,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574', - 'id': 538, + 'id': 573, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '10554:67:1', + 'src': '10889:67:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3', @@ -15873,21 +16812,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Subscription is not ready or conditions of transction are not met\'' } ], - 'id': 527, + 'id': 562, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '10444:7:1', + 'referencedDeclaration': 1390, + 'src': '10779:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 539, + 'id': 574, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15895,20 +16834,20 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10444:179:1', + 'src': '10779:179:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 540, + 'id': 575, 'nodeType': 'ExpressionStatement', - 'src': '10444:179:1' + 'src': '10779:179:1' }, { 'expression': { 'argumentTypes': null, - 'id': 549, + 'id': 584, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -15917,26 +16856,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 541, + 'id': 576, 'name': 'nextValidTimestamp', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 85, - 'src': '10713:18:1', + 'referencedDeclaration': 87, + 'src': '11048:18:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_bytes32_$_t_uint256_$', 'typeString': 'mapping(bytes32 => uint256)' } }, - 'id': 543, + 'id': 578, 'indexExpression': { 'argumentTypes': null, - 'id': 542, + 'id': 577, 'name': 'subscriptionHash', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 516, - 'src': '10732:16:1', + 'referencedDeclaration': 551, + 'src': '11067:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes32', 'typeString': 'bytes32' @@ -15947,7 +16886,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': true, 'nodeType': 'IndexAccess', - 'src': '10713:36:1', + 'src': '11048:36:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15960,12 +16899,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 547, + 'id': 582, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '10772:13:1', + 'referencedDeclaration': 532, + 'src': '11107:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -15983,18 +16922,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 544, + 'id': 579, 'name': 'block', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1341, - 'src': '10752:5:1', + 'referencedDeclaration': 1376, + 'src': '11087:5:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_block', 'typeString': 'block' } }, - 'id': 545, + 'id': 580, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16002,27 +16941,27 @@ let compiledSubscription1 = { 'memberName': 'timestamp', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '10752:15:1', + 'src': '11087:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 546, + 'id': 581, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'add', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 863, - 'src': '10752:19:1', + 'referencedDeclaration': 898, + 'src': '11087:19:1', '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': 548, + 'id': 583, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16030,21 +16969,21 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '10752:34:1', + 'src': '11087:34:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '10713:73:1', + 'src': '11048:73:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 550, + 'id': 585, 'nodeType': 'ExpressionStatement', - 'src': '10713:73:1' + 'src': '11048:73:1' }, { 'condition': { @@ -16053,19 +16992,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 555, + 'id': 590, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 551, + 'id': 586, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10905:5:1', + 'referencedDeclaration': 536, + 'src': '11240:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16077,26 +17016,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 552, + 'id': 587, 'name': 'extraNonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 89, - 'src': '10913:10:1', + 'referencedDeclaration': 91, + 'src': '11248:10:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', 'typeString': 'mapping(address => uint256)' } }, - 'id': 554, + 'id': 589, 'indexExpression': { 'argumentTypes': null, - 'id': 553, + 'id': 588, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10924:4:1', + 'referencedDeclaration': 524, + 'src': '11259:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16107,31 +17046,31 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': false, 'nodeType': 'IndexAccess', - 'src': '10913:16:1', + 'src': '11248:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '10905:24:1', + 'src': '11240:24:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, 'falseBody': null, - 'id': 563, + 'id': 598, 'nodeType': 'IfStatement', - 'src': '10902:75:1', + 'src': '11237:75:1', 'trueBody': { - 'id': 562, + 'id': 597, 'nodeType': 'Block', - 'src': '10930:47:1', + 'src': '11265:47:1', 'statements': [ { 'expression': { 'argumentTypes': null, - 'id': 560, + 'id': 595, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16140,26 +17079,26 @@ let compiledSubscription1 = { 'argumentTypes': null, 'baseExpression': { 'argumentTypes': null, - 'id': 556, + 'id': 591, 'name': 'extraNonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 89, - 'src': '10942:10:1', + 'referencedDeclaration': 91, + 'src': '11277:10:1', 'typeDescriptions': { 'typeIdentifier': 't_mapping$_t_address_$_t_uint256_$', 'typeString': 'mapping(address => uint256)' } }, - 'id': 558, + 'id': 593, 'indexExpression': { 'argumentTypes': null, - 'id': 557, + 'id': 592, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '10953:4:1', + 'referencedDeclaration': 524, + 'src': '11288:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16170,7 +17109,7 @@ let compiledSubscription1 = { 'isPure': false, 'lValueRequested': true, 'nodeType': 'IndexAccess', - 'src': '10942:16:1', + 'src': '11277:16:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16180,42 +17119,42 @@ let compiledSubscription1 = { 'operator': '=', 'rightHandSide': { 'argumentTypes': null, - 'id': 559, + 'id': 594, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '10961:5:1', + 'referencedDeclaration': 536, + 'src': '11296:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '10942:24:1', + 'src': '11277:24:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'id': 561, + 'id': 596, 'nodeType': 'ExpressionStatement', - 'src': '10942:24:1' + 'src': '11277:24:1' } ] } }, { 'assignments': [ - 565 + 600 ], 'declarations': [ { 'constant': false, - 'id': 565, + 'id': 600, 'name': 'startingBalance', 'nodeType': 'VariableDeclaration', - 'scope': 636, - 'src': '11062:23:1', + 'scope': 671, + 'src': '11397:23:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -16223,10 +17162,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 564, + 'id': 599, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '11062:7:1', + 'src': '11397:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16236,18 +17175,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 572, + 'id': 607, 'initialValue': { 'argumentTypes': null, 'arguments': [ { 'argumentTypes': null, - 'id': 570, + 'id': 605, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11118:2:1', + 'referencedDeclaration': 526, + 'src': '11453:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16266,12 +17205,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 567, + 'id': 602, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11094:12:1', + 'referencedDeclaration': 528, + 'src': '11429:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16285,18 +17224,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 566, + 'id': 601, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '11088:5:1', + 'referencedDeclaration': 1302, + 'src': '11423:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 568, + 'id': 603, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16304,27 +17243,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11088:19:1', + 'src': '11423:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 569, + 'id': 604, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'balanceOf', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 925, - 'src': '11088:29:1', + 'referencedDeclaration': 960, + 'src': '11423:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address) view external returns (uint256)' } }, - 'id': 571, + 'id': 606, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16332,14 +17271,14 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11088:33:1', + 'src': '11423:33:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, 'nodeType': 'VariableDeclarationStatement', - 'src': '11062:59:1' + 'src': '11397:59:1' }, { 'expression': { @@ -16347,12 +17286,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 577, + 'id': 612, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '11164:4:1', + 'referencedDeclaration': 524, + 'src': '11499:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16360,12 +17299,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 578, + 'id': 613, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11169:2:1', + 'referencedDeclaration': 526, + 'src': '11504:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16373,12 +17312,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 579, + 'id': 614, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '11172:11:1', + 'referencedDeclaration': 530, + 'src': '11507:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16405,12 +17344,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 574, + 'id': 609, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11137:12:1', + 'referencedDeclaration': 528, + 'src': '11472:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16424,18 +17363,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 573, + 'id': 608, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '11131:5:1', + 'referencedDeclaration': 1302, + 'src': '11466:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 575, + 'id': 610, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16443,27 +17382,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11131:19:1', + 'src': '11466:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 576, + 'id': 611, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'transferFrom', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 1014, - 'src': '11131:32:1', + 'referencedDeclaration': 1049, + 'src': '11466:32:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', 'typeString': 'function (address,address,uint256) external returns (bool)' } }, - 'id': 580, + 'id': 615, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16471,15 +17410,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11131:53:1', + 'src': '11466:53:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'id': 581, + 'id': 616, 'nodeType': 'ExpressionStatement', - 'src': '11131:53:1' + 'src': '11466:53:1' }, { 'expression': { @@ -16491,7 +17430,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 593, + 'id': 628, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16505,19 +17444,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 585, + 'id': 620, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 583, + 'id': 618, 'name': 'startingBalance', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 565, - 'src': '11214:15:1', + 'referencedDeclaration': 600, + 'src': '11549:15:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16527,32 +17466,32 @@ let compiledSubscription1 = { 'operator': '+', 'rightExpression': { 'argumentTypes': null, - 'id': 584, + 'id': 619, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '11230:11:1', + 'referencedDeclaration': 530, + 'src': '11565:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '11214:27:1', + 'src': '11549:27:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } } ], - 'id': 586, + 'id': 621, 'isConstant': false, 'isInlineArray': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'nodeType': 'TupleExpression', - 'src': '11213:29:1', + 'src': '11548:29:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16565,12 +17504,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 591, + 'id': 626, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11276:2:1', + 'referencedDeclaration': 526, + 'src': '11611:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16589,12 +17528,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 588, + 'id': 623, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11252:12:1', + 'referencedDeclaration': 528, + 'src': '11587:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16608,18 +17547,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 587, + 'id': 622, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '11246:5:1', + 'referencedDeclaration': 1302, + 'src': '11581:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 589, + 'id': 624, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16627,27 +17566,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11246:19:1', + 'src': '11581:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 590, + 'id': 625, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'balanceOf', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 925, - 'src': '11246:29:1', + 'referencedDeclaration': 960, + 'src': '11581:29:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_view$_t_address_$returns$_t_uint256_$', 'typeString': 'function (address) view external returns (uint256)' } }, - 'id': 592, + 'id': 627, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16655,13 +17594,13 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11246:33:1', + 'src': '11581:33:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' } }, - 'src': '11213:66:1', + 'src': '11548:66:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -16670,14 +17609,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79', - 'id': 594, + 'id': 629, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '11291:40:1', + 'src': '11626:40:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7', @@ -16697,21 +17636,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'ERC20 Balance did not change correctly\'' } ], - 'id': 582, + 'id': 617, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '11194:7:1', + 'referencedDeclaration': 1390, + 'src': '11529:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 595, + 'id': 630, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16719,15 +17658,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11194:147:1', + 'src': '11529:147:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 596, + 'id': 631, 'nodeType': 'ExpressionStatement', - 'src': '11194:147:1' + 'src': '11529:147:1' }, { 'expression': { @@ -16738,18 +17677,18 @@ let compiledSubscription1 = { 'arguments': [], 'expression': { 'argumentTypes': [], - 'id': 598, + 'id': 633, 'name': 'checkSuccess', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 652, - 'src': '11371:12:1', + 'referencedDeclaration': 687, + 'src': '11706:12:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', 'typeString': 'function () pure returns (bool)' } }, - 'id': 599, + 'id': 634, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16757,7 +17696,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11371:14:1', + 'src': '11706:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -16766,14 +17705,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564', - 'id': 600, + 'id': 635, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '11397:55:1', + 'src': '11732:55:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28', @@ -16793,21 +17732,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Subscription::executeSubscription TransferFrom failed\'' } ], - 'id': 597, + 'id': 632, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '11352:7:1', + 'referencedDeclaration': 1390, + 'src': '11687:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 601, + 'id': 636, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16815,15 +17754,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11352:112:1', + 'src': '11687:112:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 602, + 'id': 637, 'nodeType': 'ExpressionStatement', - 'src': '11352:112:1' + 'src': '11687:112:1' }, { 'eventCall': { @@ -16831,12 +17770,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 604, + 'id': 639, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '11514:4:1', + 'referencedDeclaration': 524, + 'src': '11849:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16844,12 +17783,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 605, + 'id': 640, 'name': 'to', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 491, - 'src': '11520:2:1', + 'referencedDeclaration': 526, + 'src': '11855:2:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16857,12 +17796,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 606, + 'id': 641, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '11524:12:1', + 'referencedDeclaration': 528, + 'src': '11859:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -16870,12 +17809,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 607, + 'id': 642, 'name': 'tokenAmount', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 495, - 'src': '11538:11:1', + 'referencedDeclaration': 530, + 'src': '11873:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16883,12 +17822,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 608, + 'id': 643, 'name': 'periodSeconds', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 497, - 'src': '11551:13:1', + 'referencedDeclaration': 532, + 'src': '11886:13:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16896,12 +17835,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 609, + 'id': 644, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '11566:8:1', + 'referencedDeclaration': 534, + 'src': '11901:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16909,12 +17848,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 610, + 'id': 645, 'name': 'nonce', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 501, - 'src': '11576:5:1', + 'referencedDeclaration': 536, + 'src': '11911:5:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -16952,18 +17891,18 @@ let compiledSubscription1 = { 'typeString': 'uint256' } ], - 'id': 603, + 'id': 638, 'name': 'ExecuteSubscription', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 105, - 'src': '11481:19:1', + 'referencedDeclaration': 107, + 'src': '11816:19:1', 'typeDescriptions': { 'typeIdentifier': 't_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$', 'typeString': 'function (address,address,address,uint256,uint256,uint256,uint256)' } }, - 'id': 611, + 'id': 646, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -16971,15 +17910,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '11481:110:1', + 'src': '11816:110:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 612, + 'id': 647, 'nodeType': 'EmitStatement', - 'src': '11476:115:1' + 'src': '11811:115:1' }, { 'condition': { @@ -16988,19 +17927,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 615, + 'id': 650, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 613, + 'id': 648, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '11811:8:1', + 'referencedDeclaration': 534, + 'src': '12146:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17011,14 +17950,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 614, + 'id': 649, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '11822:1:1', + 'src': '12157:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -17026,20 +17965,20 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '11811:12:1', + 'src': '12146:12:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, 'falseBody': null, - 'id': 633, + 'id': 668, 'nodeType': 'IfStatement', - 'src': '11807:822:1', + 'src': '12142:822:1', 'trueBody': { - 'id': 632, + 'id': 667, 'nodeType': 'Block', - 'src': '11825:804:1', + 'src': '12160:804:1', 'statements': [ { 'expression': { @@ -17047,12 +17986,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 620, + 'id': 655, 'name': 'from', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 489, - 'src': '12437:4:1', + 'referencedDeclaration': 524, + 'src': '12772:4:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -17062,18 +18001,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 621, + 'id': 656, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '12443:3:1', + 'referencedDeclaration': 1386, + 'src': '12778:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 622, + 'id': 657, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17081,7 +18020,7 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '12443:10:1', + 'src': '12778:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -17089,12 +18028,12 @@ let compiledSubscription1 = { }, { 'argumentTypes': null, - 'id': 623, + 'id': 658, 'name': 'gasPrice', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 499, - 'src': '12455:8:1', + 'referencedDeclaration': 534, + 'src': '12790:8:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17121,12 +18060,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 617, + 'id': 652, 'name': 'tokenAddress', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 493, - 'src': '12410:12:1', + 'referencedDeclaration': 528, + 'src': '12745:12:1', 'typeDescriptions': { 'typeIdentifier': 't_address', 'typeString': 'address' @@ -17140,18 +18079,18 @@ let compiledSubscription1 = { 'typeString': 'address' } ], - 'id': 616, + 'id': 651, 'name': 'ERC20', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1267, - 'src': '12404:5:1', + 'referencedDeclaration': 1302, + 'src': '12739:5:1', 'typeDescriptions': { - 'typeIdentifier': 't_type$_t_contract$_ERC20_$1267_$', + 'typeIdentifier': 't_type$_t_contract$_ERC20_$1302_$', 'typeString': 'type(contract ERC20)' } }, - 'id': 618, + 'id': 653, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17159,27 +18098,27 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12404:19:1', + 'src': '12739:19:1', 'typeDescriptions': { - 'typeIdentifier': 't_contract$_ERC20_$1267', + 'typeIdentifier': 't_contract$_ERC20_$1302', 'typeString': 'contract ERC20' } }, - 'id': 619, + 'id': 654, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'memberName': 'transferFrom', 'nodeType': 'MemberAccess', - 'referencedDeclaration': 1014, - 'src': '12404:32:1', + 'referencedDeclaration': 1049, + 'src': '12739:32:1', 'typeDescriptions': { 'typeIdentifier': 't_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$', 'typeString': 'function (address,address,uint256) external returns (bool)' } }, - 'id': 624, + 'id': 659, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17187,15 +18126,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12404:60:1', + 'src': '12739:60:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'id': 625, + 'id': 660, 'nodeType': 'ExpressionStatement', - 'src': '12404:60:1' + 'src': '12739:60:1' }, { 'expression': { @@ -17206,18 +18145,18 @@ let compiledSubscription1 = { 'arguments': [], 'expression': { 'argumentTypes': [], - 'id': 627, + 'id': 662, 'name': 'checkSuccess', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 652, - 'src': '12503:12:1', + 'referencedDeclaration': 687, + 'src': '12838:12:1', 'typeDescriptions': { 'typeIdentifier': 't_function_internal_pure$__$returns$_t_bool_$', 'typeString': 'function () pure returns (bool)' } }, - 'id': 628, + 'id': 663, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17225,7 +18164,7 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12503:14:1', + 'src': '12838:14:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -17234,14 +18173,14 @@ let compiledSubscription1 = { { 'argumentTypes': null, 'hexValue': '537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74', - 'id': 629, + 'id': 664, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'string', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '12535:69:1', + 'src': '12870:69:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7', @@ -17261,21 +18200,21 @@ let compiledSubscription1 = { 'typeString': 'literal_string \'Subscription::executeSubscription Failed to pay gas as from account\'' } ], - 'id': 626, + 'id': 661, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1355, - 'src': '12478:7:1', + 'referencedDeclaration': 1390, + 'src': '12813:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$', 'typeString': 'function (bool,string memory) pure' } }, - 'id': 630, + 'id': 665, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17283,15 +18222,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '12478:140:1', + 'src': '12813:140:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 631, + 'id': 666, 'nodeType': 'ExpressionStatement', - 'src': '12478:140:1' + 'src': '12813:140:1' } ] } @@ -17300,14 +18239,14 @@ let compiledSubscription1 = { 'expression': { 'argumentTypes': null, 'hexValue': '74727565', - 'id': 634, + 'id': 669, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'bool', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '12646:4:1', + 'src': '12981:4:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_bool', @@ -17315,31 +18254,31 @@ let compiledSubscription1 = { }, 'value': 'true' }, - 'functionReturnParameters': 507, - 'id': 635, + 'functionReturnParameters': 542, + 'id': 670, 'nodeType': 'Return', - 'src': '12639:11:1' + 'src': '12974:11:1' } ] }, 'documentation': null, - 'id': 637, + 'id': 672, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'executeSubscription', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 504, + 'id': 539, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 489, + 'id': 524, 'name': 'from', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9604:12:1', + 'scope': 672, + 'src': '9939:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17347,10 +18286,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 488, + 'id': 523, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '9604:7:1', + 'src': '9939:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -17362,11 +18301,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 491, + 'id': 526, 'name': 'to', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9643:10:1', + 'scope': 672, + 'src': '9978:10:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17374,10 +18313,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 490, + 'id': 525, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '9643:7:1', + 'src': '9978:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -17389,11 +18328,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 493, + 'id': 528, 'name': 'tokenAddress', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9679:20:1', + 'scope': 672, + 'src': '10014:20:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17401,10 +18340,10 @@ let compiledSubscription1 = { 'typeString': 'address' }, 'typeName': { - 'id': 492, + 'id': 527, 'name': 'address', 'nodeType': 'ElementaryTypeName', - 'src': '9679:7:1', + 'src': '10014:7:1', 'stateMutability': 'nonpayable', 'typeDescriptions': { 'typeIdentifier': 't_address', @@ -17416,11 +18355,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 495, + 'id': 530, 'name': 'tokenAmount', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9751:19:1', + 'scope': 672, + 'src': '10086:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17428,10 +18367,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 494, + 'id': 529, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9751:7:1', + 'src': '10086:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17442,11 +18381,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 497, + 'id': 532, 'name': 'periodSeconds', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9821:21:1', + 'scope': 672, + 'src': '10156:21:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17454,10 +18393,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 496, + 'id': 531, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9821:7:1', + 'src': '10156:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17468,11 +18407,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 499, + 'id': 534, 'name': 'gasPrice', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9893:16:1', + 'scope': 672, + 'src': '10228:16:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17480,10 +18419,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 498, + 'id': 533, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9893:7:1', + 'src': '10228:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17494,11 +18433,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 501, + 'id': 536, 'name': 'nonce', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '9977:13:1', + 'scope': 672, + 'src': '10312:13:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17506,10 +18445,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 500, + 'id': 535, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '9977:7:1', + 'src': '10312:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17520,11 +18459,11 @@ let compiledSubscription1 = { }, { 'constant': false, - 'id': 503, + 'id': 538, 'name': 'signature', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '10060:22:1', + 'scope': 672, + 'src': '10395:22:1', 'stateVariable': false, 'storageLocation': 'memory', 'typeDescriptions': { @@ -17532,10 +18471,10 @@ let compiledSubscription1 = { 'typeString': 'bytes' }, 'typeName': { - 'id': 502, + 'id': 537, 'name': 'bytes', 'nodeType': 'ElementaryTypeName', - 'src': '10060:5:1', + 'src': '10395:5:1', 'typeDescriptions': { 'typeIdentifier': 't_bytes_storage_ptr', 'typeString': 'bytes' @@ -17545,19 +18484,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '9594:544:1' + 'src': '9929:544:1' }, 'returnParameters': { - 'id': 507, + 'id': 542, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 506, + 'id': 541, 'name': 'success', 'nodeType': 'VariableDeclaration', - 'scope': 637, - 'src': '10171:12:1', + 'scope': 672, + 'src': '10506:12:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17565,10 +18504,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 505, + 'id': 540, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '10171:4:1', + 'src': '10506:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -17578,32 +18517,32 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '10170:14:1' + 'src': '10505:14:1' }, - 'scope': 675, - 'src': '9566:3091:1', + 'scope': 710, + 'src': '9901:3091:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'public' }, { 'body': { - 'id': 651, + 'id': 686, 'nodeType': 'Block', - 'src': '13157:770:1', + 'src': '13492:770:1', 'statements': [ { 'assignments': [ - 643 + 678 ], 'declarations': [ { 'constant': false, - 'id': 643, + 'id': 678, 'name': 'returnValue', 'nodeType': 'VariableDeclaration', - 'scope': 651, - 'src': '13167:19:1', + 'scope': 686, + 'src': '13502:19:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17611,10 +18550,10 @@ let compiledSubscription1 = { 'typeString': 'uint256' }, 'typeName': { - 'id': 642, + 'id': 677, 'name': 'uint256', 'nodeType': 'ElementaryTypeName', - 'src': '13167:7:1', + 'src': '13502:7:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17624,18 +18563,18 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'id': 645, + 'id': 680, 'initialValue': { 'argumentTypes': null, 'hexValue': '30', - 'id': 644, + 'id': 679, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '13189:1:1', + 'src': '13524:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -17644,33 +18583,33 @@ let compiledSubscription1 = { 'value': '0' }, 'nodeType': 'VariableDeclarationStatement', - 'src': '13167:23:1' + 'src': '13502:23:1' }, { 'externalReferences': [ { 'returnValue': { - 'declaration': 643, + 'declaration': 678, 'isOffset': false, 'isSlot': false, - 'src': '13472:11:1', + 'src': '13807:11:1', 'valueSize': 1 } }, { 'returnValue': { - 'declaration': 643, + 'declaration': 678, 'isOffset': false, 'isSlot': false, - 'src': '13749:11:1', + 'src': '14084:11:1', 'valueSize': 1 } } ], - 'id': 646, + 'id': 681, 'nodeType': 'InlineAssembly', 'operations': '{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}', - 'src': '13268:635:1' + 'src': '13603:635:1' }, { 'expression': { @@ -17679,19 +18618,19 @@ let compiledSubscription1 = { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' }, - 'id': 649, + 'id': 684, 'isConstant': false, 'isLValue': false, 'isPure': false, 'lValueRequested': false, 'leftExpression': { 'argumentTypes': null, - 'id': 647, + 'id': 682, 'name': 'returnValue', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 643, - 'src': '13904:11:1', + 'referencedDeclaration': 678, + 'src': '14239:11:1', 'typeDescriptions': { 'typeIdentifier': 't_uint256', 'typeString': 'uint256' @@ -17702,14 +18641,14 @@ let compiledSubscription1 = { 'rightExpression': { 'argumentTypes': null, 'hexValue': '30', - 'id': 648, + 'id': 683, 'isConstant': false, 'isLValue': false, 'isPure': true, 'kind': 'number', 'lValueRequested': false, 'nodeType': 'Literal', - 'src': '13919:1:1', + 'src': '14254:1:1', 'subdenomination': null, 'typeDescriptions': { 'typeIdentifier': 't_rational_0_by_1', @@ -17717,43 +18656,43 @@ let compiledSubscription1 = { }, 'value': '0' }, - 'src': '13904:16:1', + 'src': '14239:16:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' } }, - 'functionReturnParameters': 641, - 'id': 650, + 'functionReturnParameters': 676, + 'id': 685, 'nodeType': 'Return', - 'src': '13897:23:1' + 'src': '14232:23:1' } ] }, 'documentation': 'Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.', - 'id': 652, + 'id': 687, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'checkSuccess', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 638, + 'id': 673, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '13093:7:1' + 'src': '13428:7:1' }, 'returnParameters': { - 'id': 641, + 'id': 676, 'nodeType': 'ParameterList', 'parameters': [ { 'constant': false, - 'id': 640, + 'id': 675, 'name': '', 'nodeType': 'VariableDeclaration', - 'scope': 652, - 'src': '13147:4:1', + 'scope': 687, + 'src': '13482:4:1', 'stateVariable': false, 'storageLocation': 'default', 'typeDescriptions': { @@ -17761,10 +18700,10 @@ let compiledSubscription1 = { 'typeString': 'bool' }, 'typeName': { - 'id': 639, + 'id': 674, 'name': 'bool', 'nodeType': 'ElementaryTypeName', - 'src': '13147:4:1', + 'src': '13482:4:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -17774,19 +18713,19 @@ let compiledSubscription1 = { 'visibility': 'internal' } ], - 'src': '13146:6:1' + 'src': '13481:6:1' }, - 'scope': 675, - 'src': '13072:855:1', + 'scope': 710, + 'src': '13407:855:1', 'stateMutability': 'pure', 'superFunction': null, 'visibility': 'private' }, { 'body': { - 'id': 666, + 'id': 701, 'nodeType': 'Block', - 'src': '14101:70:1', + 'src': '14436:68:1', 'statements': [ { 'expression': { @@ -17798,7 +18737,7 @@ let compiledSubscription1 = { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' }, - 'id': 659, + 'id': 694, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17807,18 +18746,18 @@ let compiledSubscription1 = { 'argumentTypes': null, 'expression': { 'argumentTypes': null, - 'id': 656, + 'id': 691, 'name': 'msg', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1351, - 'src': '14117:3:1', + 'referencedDeclaration': 1386, + 'src': '14452:3:1', 'typeDescriptions': { 'typeIdentifier': 't_magic_message', 'typeString': 'msg' } }, - 'id': 657, + 'id': 692, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17826,7 +18765,7 @@ let compiledSubscription1 = { 'memberName': 'sender', 'nodeType': 'MemberAccess', 'referencedDeclaration': null, - 'src': '14117:10:1', + 'src': '14452:10:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -17836,18 +18775,18 @@ let compiledSubscription1 = { 'operator': '==', 'rightExpression': { 'argumentTypes': null, - 'id': 658, - 'name': 'author', + 'id': 693, + 'name': 'owner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], 'referencedDeclaration': 69, - 'src': '14129:6:1', + 'src': '14464:5:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' } }, - 'src': '14117:18:1', + 'src': '14452:17:1', 'typeDescriptions': { 'typeIdentifier': 't_bool', 'typeString': 'bool' @@ -17861,21 +18800,21 @@ let compiledSubscription1 = { 'typeString': 'bool' } ], - 'id': 655, + 'id': 690, 'name': 'require', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1354, - 1355 + 1389, + 1390 ], - 'referencedDeclaration': 1354, - 'src': '14109:7:1', + 'referencedDeclaration': 1389, + 'src': '14444:7:1', 'typeDescriptions': { 'typeIdentifier': 't_function_require_pure$_t_bool_$returns$__$', 'typeString': 'function (bool) pure' } }, - 'id': 660, + 'id': 695, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17883,15 +18822,15 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '14109:27:1', + 'src': '14444:26:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 661, + 'id': 696, 'nodeType': 'ExpressionStatement', - 'src': '14109:27:1' + 'src': '14444:26:1' }, { 'expression': { @@ -17899,12 +18838,12 @@ let compiledSubscription1 = { 'arguments': [ { 'argumentTypes': null, - 'id': 663, - 'name': 'author', + 'id': 698, + 'name': 'owner', 'nodeType': 'Identifier', 'overloadedDeclarations': [], 'referencedDeclaration': 69, - 'src': '14157:6:1', + 'src': '14491:5:1', 'typeDescriptions': { 'typeIdentifier': 't_address_payable', 'typeString': 'address payable' @@ -17918,18 +18857,18 @@ let compiledSubscription1 = { 'typeString': 'address payable' } ], - 'id': 662, + 'id': 697, 'name': 'selfdestruct', 'nodeType': 'Identifier', 'overloadedDeclarations': [], - 'referencedDeclaration': 1359, - 'src': '14144:12:1', + 'referencedDeclaration': 1394, + 'src': '14478:12:1', 'typeDescriptions': { 'typeIdentifier': 't_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$', 'typeString': 'function (address payable)' } }, - 'id': 664, + 'id': 699, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -17937,48 +18876,48 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '14144:20:1', + 'src': '14478:19:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 665, + 'id': 700, 'nodeType': 'ExpressionStatement', - 'src': '14144:20:1' + 'src': '14478:19:1' } ] }, 'documentation': null, - 'id': 667, + 'id': 702, 'implemented': true, 'kind': 'function', 'modifiers': [], 'name': 'endContract', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 653, + 'id': 688, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14077:2:1' + 'src': '14412:2:1' }, 'returnParameters': { - 'id': 654, + 'id': 689, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14101:0:1' + 'src': '14436:0:1' }, - 'scope': 675, - 'src': '14057:114:1', + 'scope': 710, + 'src': '14392:112:1', 'stateMutability': 'nonpayable', 'superFunction': null, 'visibility': 'external' }, { 'body': { - 'id': 673, + 'id': 708, 'nodeType': 'Block', - 'src': '14277:25:1', + 'src': '14610:25:1', 'statements': [ { 'expression': { @@ -17986,21 +18925,21 @@ let compiledSubscription1 = { 'arguments': [], 'expression': { 'argumentTypes': [], - 'id': 670, + 'id': 705, 'name': 'revert', 'nodeType': 'Identifier', 'overloadedDeclarations': [ - 1356, - 1357 + 1391, + 1392 ], - 'referencedDeclaration': 1356, - 'src': '14286:6:1', + 'referencedDeclaration': 1391, + 'src': '14619:6:1', 'typeDescriptions': { 'typeIdentifier': 't_function_revert_pure$__$returns$__$', 'typeString': 'function () pure' } }, - 'id': 671, + 'id': 706, 'isConstant': false, 'isLValue': false, 'isPure': false, @@ -18008,49 +18947,49 @@ let compiledSubscription1 = { 'lValueRequested': false, 'names': [], 'nodeType': 'FunctionCall', - 'src': '14286:9:1', + 'src': '14619:9:1', 'typeDescriptions': { 'typeIdentifier': 't_tuple$__$', 'typeString': 'tuple()' } }, - 'id': 672, + 'id': 707, 'nodeType': 'ExpressionStatement', - 'src': '14286:9:1' + 'src': '14619:9:1' } ] }, 'documentation': null, - 'id': 674, + 'id': 709, 'implemented': true, 'kind': 'fallback', 'modifiers': [], 'name': '', 'nodeType': 'FunctionDefinition', 'parameters': { - 'id': 668, + 'id': 703, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14257:2:1' + 'src': '14590:2:1' }, 'returnParameters': { - 'id': 669, + 'id': 704, 'nodeType': 'ParameterList', 'parameters': [], - 'src': '14277:0:1' + 'src': '14610:0:1' }, - 'scope': 675, - 'src': '14248:54:1', + 'scope': 710, + 'src': '14581:54:1', 'stateMutability': 'payable', 'superFunction': null, 'visibility': 'external' } ], - 'scope': 676, - 'src': '1091:13213:1' + 'scope': 711, + 'src': '1091:13546:1' } ], - 'src': '0:14305:1' + 'src': '0:14638:1' }, 'compiler': { 'name': 'solc', @@ -18058,7 +18997,7 @@ let compiledSubscription1 = { }, 'networks': {}, 'schemaVersion': '3.0.6', - 'updatedAt': '2019-05-12T15:53:10.470Z', + 'updatedAt': '2019-05-22T12:57:22.984Z', 'devdoc': { 'methods': {} }, diff --git a/app/grants/abi_v1.json b/app/grants/abi_v1.json index a20e3746c0f..670e27e61fd 100644 --- a/app/grants/abi_v1.json +++ b/app/grants/abi_v1.json @@ -87,17 +87,26 @@ }, { "constant": true, - "inputs": [ + "inputs": [], + "name": "owner", + "outputs": [ { "name": "", "type": "address" } ], - "name": "extraNonce", + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "contractVersion", "outputs": [ { "name": "", - "type": "uint256" + "type": "uint8" } ], "payable": false, @@ -106,14 +115,19 @@ }, { "constant": true, - "inputs": [], - "name": "author", - "outputs": [ + "inputs": [ { "name": "", "type": "address" } ], + "name": "extraNonce", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], "payable": false, "stateMutability": "view", "type": "function" @@ -261,6 +275,37 @@ "name": "CancelSubscription", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "oldOwner", + "type": "address" + }, + { + "indexed": false, + "name": "newOwner", + "type": "address" + } + ], + "name": "ownershipChanged", + "type": "event" + }, + { + "constant": false, + "inputs": [ + { + "name": "_newOwner", + "type": "address" + } + ], + "name": "changeOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, { "constant": true, "inputs": [ @@ -501,21 +546,21 @@ "type": "function" } ], - "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"requiredGasPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"subscriptionHash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"getSubscriptionSigner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredTokenAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredToAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredPeriodSeconds\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredTokenAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"cancelSubscription\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"relayer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"extraNonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"author\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"subscriptionHash\",\"type\":\"bytes32\"},{\"name\":\"gracePeriodSeconds\",\"type\":\"uint256\"}],\"name\":\"isSubscriptionActive\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"endContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"getSubscriptionHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"executeSubscription\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isSubscriptionReady\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextValidTimestamp\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_toAddress\",\"type\":\"address\"},{\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"name\":\"_tokenAmount\",\"type\":\"uint256\"},{\"name\":\"_periodSeconds\",\"type\":\"uint256\"},{\"name\":\"_gasPrice\",\"type\":\"uint256\"},{\"name\":\"_version\",\"type\":\"uint8\"},{\"name\":\"_relayer\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ExecuteSubscription\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"CancelSubscription\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\":\"Subscription\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\":{\"keccak256\":\"0xd23b843d2a5cbd6e762c03fc55c62e331f306f37458e14cf791f4d10fc8f4c4f\",\"urls\":[\"bzzr://33f93fb60362d588a089d221a20097a97112f7060364f97151667be7e2007bc7\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0x0cbeb7f69b70ff62eb5536caebbc8701b6490ae7ee2e252d77891cf6eba11326\",\"urls\":[\"bzzr://58a443499466ee0706d22af81b43ab6779b519255fbc66276546386ec00a30d7\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xc2a200a877c4a9b2475c246c54ffecc69ffde3e11af83319c63c2dc5458bac80\",\"urls\":[\"bzzr://c8876e2c39b60f155d748d71d715c8f3903fae5a405ac599adcb6ad2f9a583f9\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x3dceb7e4aa237a56111c13f77d7efadeceda7271d62bfac94ac79afab7c1f411\",\"urls\":[\"bzzr://2f34152a5bec385352002c31bc89f5e9935f628f1923ccea45c2281e0084a4db\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x59e7df16169a498cb8837963b2f5461d88e63bd1eb6c7d58b814d76b84ccbe61\",\"urls\":[\"bzzr://e572c9c4e02e37349702451bf3b5dcbbc86a19da5a51695b5b3e1bfe1e7825dc\"]}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405160e080612345833981018060405260e081101561003057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846004819055508360058190555082600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505061219a806101ab6000396000f3fe608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029", - "deployedBytecode": "0x608060405260043610610110576000357c010000000000000000000000000000000000000000000000000000000090048063a3d53d18116100a7578063c814786511610076578063c814786514610646578063d3c576cd14610713578063d933c0661461087c578063ff59bff8146109e557610110565b8063a3d53d1814610516578063a6c3e6b91461057b578063ae702ba4146105d2578063bb6e7de91461062f57610110565b80636b40bba1116100e35780636b40bba1146102d45780636f264b2e146102ff57806371d22d4d146103565780638406c079146104bf57610110565b806310d920601461011557806318f321a31461014057806329d428ca14610252578063384c33351461027d575b600080fd5b34801561012157600080fd5b5061012a610a34565b6040518082815260200191505060405180910390f35b34801561014c57600080fd5b506102106004803603604081101561016357600080fd5b81019080803590602001909291908035906020019064010000000081111561018a57600080fd5b82018360208201111561019c57600080fd5b803590602001918460018302840111640100000000831117156101be57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610a3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025e57600080fd5b50610267610a5f565b6040518082815260200191505060405180910390f35b34801561028957600080fd5b50610292610a65565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e057600080fd5b506102e9610a8b565b6040518082815260200191505060405180910390f35b34801561030b57600080fd5b50610314610a91565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561036257600080fd5b506104a5600480360361010081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ab7565b604051808215151515815260200191505060405180910390f35b3480156104cb57600080fd5b506104d4610cfd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052257600080fd5b506105656004803603602081101561053957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d23565b6040518082815260200191505060405180910390f35b34801561058757600080fd5b50610590610d3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105de57600080fd5b50610615600480360360408110156105f557600080fd5b810190808035906020019092919080359060200190929190505050610d60565b604051808215151515815260200191505060405180910390f35b34801561063b57600080fd5b50610644610dd8565b005b34801561065257600080fd5b506106fd600480360360e081101561066957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610e6d565b6040518082815260200191505060405180910390f35b34801561071f57600080fd5b50610862600480360361010081101561073757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156107dc57600080fd5b8201836020820111156107ee57600080fd5b8035906020019184600183028401116401000000008311171561081057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061146a565b604051808215151515815260200191505060405180910390f35b34801561088857600080fd5b506109cb60048036036101008110156108a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561094557600080fd5b82018360208201111561095757600080fd5b8035906020019184600183028401116401000000008311171561097957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611bb0565b604051808215151515815260200191505060405180910390f35b3480156109f157600080fd5b50610a1e60048036036020811015610a0857600080fd5b8101908080359060200190929190505050611e8a565b6040518082815260200191505060405180910390f35b60065481565b6000610a5782610a4985611ea2565b611efa90919063ffffffff16565b905092915050565b60045481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610ac98a8a8a8a8a8a8a610e6d565b90506000610ad78285610a3a565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612061602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610c02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610da65760009050610dd2565b610dcc82600760008681526020019081526020016000205461200190919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e3357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f185750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b1515610f8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806110365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806110bc575060045485145b1515611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611142575060055484145b15156111b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806111c8575060065483145b151561123c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114c857600080fd5b60006114d98a8a8a8a8a8a8a610e6d565b90506114eb8a8a8a8a8a8a8a8a611bb0565b1515611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806121086041913960600191505060405180910390fd5b611555864261200190919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156115f85783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561169357600080fd5b505afa1580156116a7573d6000803e3d6000fd5b505050506040513d60208110156116bd57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117a757600080fd5b505af11580156117bb573d6000803e3d6000fd5b505050506040513d60208110156117d157600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d60208110156118a657600080fd5b8101908080519060200190929190505050888201141515611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806121496026913960400191505060405180910390fd5b61191a612022565b1515611971576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806120906035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611b9e578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6020811015611b2c57600080fd5b810190808051906020019092919050505050611b46612022565b1515611b9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806120c56043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611bc28a8a8a8a8a8a8a610e6d565b90506000611bd08285610a3a565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ca157600080fd5b505afa158015611cb5573d6000803e3d6000fd5b505050506040513d6020811015611ccb57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d7957600080fd5b505afa158015611d8d573d6000803e3d6000fd5b505050506040513d6020811015611da357600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e1d57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3c575060076000858152602001908152602001600020544210155b8015611e5a5750611e56888b61200190919063ffffffff16565b8210155b8015611e785750611e74888b61200190919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600060418251141515611f105760009050611ffb565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115611f655760009350505050611ffb565b601b8160ff1614158015611f7d5750601c8160ff1614155b15611f8e5760009350505050611ffb565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611feb573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561201857600080fd5b8091505092915050565b600080600090503d6000811461203f576020811461204857612054565b60019150612054565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a72305820c2a8cbb755ebd520096559ff42aaaa53fe5eb026b695da6ae213734d1aabdb780029", - "sourceMap": "1091:13213:1:-;;;3145:489;8:9:-1;5:2;;;30:1;27;20:12;5:2;3145:489:1;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3145:489:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3396:10;3378:17;;:28;;;;;;;;;;;;;;;;;;3437:13;3416:20;;:34;;;;;;;;;;;;;;;;;;3480:12;3460:19;:32;;;;3524:14;3502:21;:36;;;;3565:9;3548:16;:26;;;;3591:10;3584:6;;:17;;;;;;;;;;;;;;;;;;3619:8;3611:7;;:16;;;;;;;;;;;;;;;;;;3145:489;;;;;;;1091:13213;;;;;;", - "deployedSourceMap": "1091:13213:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14286:9;;;1631:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1631:31:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6029:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6029:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6029:318:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6029:318:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6029:318:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6029:318:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6029:318:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1549:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1549:34:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1470:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1470:32:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1589:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1589:36:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1508:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1508:35:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7985:1423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7985:1423:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7985:1423:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7985:1423:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7985:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7985:1423:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1288:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1288:22:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2088:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2088:45:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2088:45:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1212:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1212:29:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3874:390;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3874:390:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3874:390:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14057:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14057:114:1;;;:::i;:::-;;4420:1548;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4420:1548:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4420:1548:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9566:3091;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9566:3091:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9566:3091:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9566:3091:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9566:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9566:3091:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6470:1261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6470:1261:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6470:1261:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6470:1261:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6470:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6470:1261:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1854:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1854:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1854:53:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1631:31;;;;:::o;6029:318::-;6250:7;6280:60;6330:9;6280:41;:16;:39;:41::i;:::-;:49;;:60;;;;:::i;:::-;6273:67;;6029:318;;;;:::o;1549:34::-;;;;:::o;1470:32::-;;;;;;;;;;;;;:::o;1589:36::-;;;;:::o;1508:35::-;;;;;;;;;;;;;:::o;7985:1423::-;8588:12;8616:24;8643:110;8676:4;8682:2;8686:12;8700:11;8713:13;8728:8;8738:5;8643:19;:110::i;:::-;8616:137;;8763:14;8780:50;8802:16;8820:9;8780:21;:50::i;:::-;8763:67;;8897:4;8887:14;;:6;:14;;;8879:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9020:10;9012:18;;:4;:18;;;9004:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9251:2;9206:18;:36;9225:16;9206:36;;;;;;;;;;;:48;;;;9308:2;9270:109;;9302:4;9270:109;;;9312:12;9326:11;9339:13;9354:8;9364:5;9270:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9397:4;9390:11;;;;7985:1423;;;;;;;;;;:::o;1288:22::-;;;;;;;;;;;;;:::o;2088:45::-;;;;;;;;;;;;;;;;;:::o;1212:29::-;;;;;;;;;;;;;:::o;3874:390::-;4027:4;4096:2;4050:18;:36;4069:16;4050:36;;;;;;;;;;;;:49;4047:88;;;4119:5;4112:12;;;;4047:88;4187:60;4228:18;4187;:36;4206:16;4187:36;;;;;;;;;;;;:40;;:60;;;;:::i;:::-;4152:15;:95;;4144:113;;3874:390;;;;;:::o;14057:114::-;14129:6;;;;;;;;;;;14117:18;;:10;:18;;;14109:27;;;;;;;;14157:6;;;;;;;;;;;14144:20;;;4420:1548;4956:7;5122:1;5093:31;;:17;;;;;;;;;;;:31;;;:58;;;;5134:17;;;;;;;;;;;5128:23;;:2;:23;;;5093:58;5084:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5233:1;5201:34;;:20;;;;;;;;;;;:34;;;:74;;;;5255:20;;;;;;;;;;;5239:36;;:12;:36;;;5201:74;5192:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5352:1;5329:19;;:24;:62;;;;5372:19;;5357:11;:34;5329:62;5320:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5469:1;5444:21;;:26;:68;;;;5491:21;;5474:13;:38;5444:68;5435:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5587:1;5567:16;;:21;:53;;;;5604:16;;5592:8;:28;5567:53;5558:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5731:4;5726:10;;5759:1;5754:7;;5787:4;5810;5832:2;5852:12;5882:11;5911:13;5942:8;5692:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5692:268:1;;;5669:292;;;;;;5662:299;;4420:1548;;;;;;;;;:::o;9566:3091::-;10171:12;10221:7;;;;;;;;;;;10207:21;;:10;:21;;;10199:30;;;;;;;;10239:24;10266:110;10299:4;10305:2;10309:12;10323:11;10336:13;10351:8;10361:5;10266:19;:110::i;:::-;10239:137;;10453:99;10473:4;10479:2;10483:12;10497:11;10510:13;10525:8;10535:5;10542:9;10453:19;:99::i;:::-;10444:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:34;10772:13;10752:15;:19;;:34;;;;:::i;:::-;10713:18;:36;10732:16;10713:36;;;;;;;;;;;:73;;;;10913:10;:16;10924:4;10913:16;;;;;;;;;;;;;;;;10905:5;:24;10902:75;;;10961:5;10942:10;:16;10953:4;10942:16;;;;;;;;;;;;;;;:24;;;;10902:75;11062:23;11094:12;11088:29;;;11118:2;11088:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11088:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11088:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11088:33:1;;;;;;;;;;;;;;;;11062:59;;11137:12;11131:32;;;11164:4;11169:2;11172:11;11131:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11131:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11131:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11131:53:1;;;;;;;;;;;;;;;;;11252:12;11246:29;;;11276:2;11246:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11246:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11246:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11246:33:1;;;;;;;;;;;;;;;;11230:11;11214:15;:27;11213:66;11194:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11371:14;:12;:14::i;:::-;11352:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11520:2;11481:110;;11514:4;11481:110;;;11524:12;11538:11;11551:13;11566:8;11576:5;11481:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11822:1;11811:8;:12;11807:822;;;12410:12;12404:32;;;12437:4;12443:10;12455:8;12404:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12404:60:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12404:60:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12404:60:1;;;;;;;;;;;;;;;;;12503:14;:12;:14::i;:::-;12478:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11807:822;12646:4;12639:11;;;;9566:3091;;;;;;;;;;:::o;6470:1261::-;7088:4;7108:24;7135:110;7168:4;7174:2;7178:12;7192:11;7205:13;7220:8;7230:5;7135:19;:110::i;:::-;7108:137;;7255:14;7272:50;7294:16;7312:9;7272:21;:50::i;:::-;7255:67;;7332:17;7358:12;7352:29;;;7382:4;7396;7352:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7352:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7352:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7352:50:1;;;;;;;;;;;;;;;;7332:70;;7412:15;7436:12;7430:29;;;7460:4;7430:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7430:35:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7430:35:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7430:35:1;;;;;;;;;;;;;;;;7412:53;;7507:4;7497:14;;:6;:14;;;:40;;;;;7535:2;7527:10;;:4;:10;;;;7497:40;:111;;;;;7572:18;:36;7591:16;7572:36;;;;;;;;;;;;7553:15;:55;;7497:111;:165;;;;;7637:25;7653:8;7637:11;:15;;:25;;;;:::i;:::-;7624:9;:38;;7497:165;:217;;;;;7689:25;7705:8;7689:11;:15;;:25;;;;:::i;:::-;7678:7;:36;;7497:217;7476:248;;;;;;6470:1261;;;;;;;;;;:::o;1854:53::-;;;;;;;;;;;;;;;;;:::o;2650:265:2:-;2719:7;2902:4;2849:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2849:58:2;;;2839:69;;;;;;2832:76;;2650:265;;;:::o;609:1891::-;687:7;768:2;748:9;:16;:22;;744:72;;;802:1;786:19;;;;744:72;882:9;901;920:7;1166:4;1155:9;1151:20;1145:27;1140:32;;1211:4;1200:9;1196:20;1190:27;1185:32;;1264:4;1253:9;1249:20;1243:27;1240:1;1235:36;1230:41;;2182:66;2177:1;2169:10;;;:79;2165:127;;;2279:1;2264:17;;;;;;;2165:127;2311:2;2306:1;:7;;;;:18;;;;;2322:2;2317:1;:7;;;;2306:18;2302:66;;;2355:1;2340:17;;;;;;;2302:66;2469:24;2479:4;2485:1;2488;2491;2469:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2469:24:2;;;;;;;;2462:31;;;;;609:1891;;;;;:::o;1439:145:3:-;1497:7;1516:9;1532:1;1528;:5;1516:17;;1556:1;1551;:6;;1543:15;;;;;;;;1576:1;1569:8;;;1439:145;;;;:::o;13072:855:1:-;13147:4;13167:19;13189:1;13167:23;;13368:14;13450:3;13445:57;;;;13573:4;13568:220;;;;13361:516;;13445:57;13487:1;13472:16;;13445:57;;13568:220;13673:4;13668:3;13663;13648:30;13770:3;13764:10;13749:25;;13361:516;;13919:1;13904:11;:16;;13897:23;;;13072:855;:::o", - "source": "pragma solidity ^0.5.2;\n\n/*\n Super Simple Token Subscriptions - https://tokensubscription.com\n //// Breakin’ Through @ University of Wyoming ////\n Austin Thomas Griffith - https://austingriffith.com\n Building on previous works:\n https://github.com/austintgriffith/token-subscription\n https://gist.github.com/androolloyd/0a62ef48887be00a5eff5c17f2be849a\n https://media.consensys.net/subscription-services-on-the-blockchain-erc-948-6ef64b083a36\n https://medium.com/gitcoin/technical-deep-dive-architecture-choices-for-subscriptions-on-the-blockchain-erc948-5fae89cabc7a\n https://github.com/ethereum/EIPs/pull/1337\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1077.md\n https://github.com/gnosis/safe-contracts\n Earlier Meta Transaction Demo:\n https://github.com/austintgriffith/bouncer-proxy\n Huge thanks, as always, to OpenZeppelin for the rad contracts:\n */\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\n\n\ncontract Subscription {\n using ECDSA for bytes32;\n using SafeMath for uint256;\n\n //who deploys the contract\n address payable public author;\n\n //restrict who can relay the metatx\n address public relayer;\n\n // the publisher may optionally deploy requirements for the subscription\n // so only meta transactions that match the requirements can be relayed\n address public requiredToAddress;\n address public requiredTokenAddress;\n uint256 public requiredTokenAmount;\n uint256 public requiredPeriodSeconds;\n uint256 public requiredGasPrice;\n\n\n // similar to a nonce that avoids replay attacks this allows a single execution\n // every x seconds for a given subscription\n // subscriptionHash => next valid block number\n mapping(bytes32 => uint256) public nextValidTimestamp;\n\n //we'll use a nonce for each from but because transactions can go through\n //multiple times, we allow anything but users can use this as a signal for\n //uniqueness\n mapping(address => uint256) public extraNonce;\n\n event ExecuteSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event CancelSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n constructor(\n address _toAddress,\n address _tokenAddress,\n uint256 _tokenAmount,\n uint256 _periodSeconds,\n uint256 _gasPrice,\n uint8 _version,\n address _relayer\n ) public {\n requiredToAddress=_toAddress;\n requiredTokenAddress=_tokenAddress;\n requiredTokenAmount=_tokenAmount;\n requiredPeriodSeconds=_periodSeconds;\n requiredGasPrice=_gasPrice;\n author=msg.sender;\n relayer=_relayer;\n }\n\n // this is used by external smart contracts to verify on-chain that a\n // particular subscription is \"paid\" and \"active\"\n // there must be a small grace period added to allow the publisher\n // or desktop miner to execute\n function isSubscriptionActive(\n bytes32 subscriptionHash,\n uint256 gracePeriodSeconds\n )\n external\n view\n returns (bool)\n {\n if(nextValidTimestamp[subscriptionHash]==uint256(-1)){\n return false;\n }\n return (block.timestamp <=\n nextValidTimestamp[subscriptionHash].add(gracePeriodSeconds)\n );\n }\n\n // given the subscription details, generate a hash and try to kind of follow\n // the eip-191 standard and eip-1077 standard from my dude @avsa\n function getSubscriptionHash(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n )\n public\n view\n returns (bytes32)\n {\n // if there are requirements from the deployer, let's make sure\n // those are met exactly\n require( requiredToAddress == address(0) || to == requiredToAddress, \"requiredToAddress Failure\" );\n require( requiredTokenAddress == address(0) || tokenAddress == requiredTokenAddress, \"requiredTokenAddress Failure\" );\n require( requiredTokenAmount == 0 || tokenAmount == requiredTokenAmount, \"requiredTokenAmount Failure\" );\n require( requiredPeriodSeconds == 0 || periodSeconds == requiredPeriodSeconds, \"requiredPeriodSeconds Failure\" );\n require( requiredGasPrice == 0 || gasPrice == requiredGasPrice, \"requiredGasPrice Failure\" );\n\n return keccak256(\n abi.encodePacked(\n byte(0x19),\n byte(0),\n address(this),\n from,\n to,\n tokenAddress,\n tokenAmount,\n periodSeconds,\n gasPrice\n ));\n }\n\n //ecrecover the signer from hash and the signature\n function getSubscriptionSigner(\n bytes32 subscriptionHash, //hash of subscription\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n pure\n returns (address)\n {\n return subscriptionHash.toEthSignedMessageHash().recover(signature);\n }\n\n //check if a subscription is signed correctly and the timestamp is ready for\n // the next execution to happen\n function isSubscriptionReady(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of the token to incentivize the relay network\n uint256 nonce,// to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n view\n returns (bool)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n uint256 allowance = ERC20(tokenAddress).allowance(from, address(this));\n uint256 balance = ERC20(tokenAddress).balanceOf(from);\n\n return (\n signer == from &&\n from != to &&\n block.timestamp >= nextValidTimestamp[subscriptionHash] &&\n allowance >= tokenAmount.add(gasPrice) &&\n balance >= tokenAmount.add(gasPrice)\n );\n }\n\n // you don't really need this if you are using the approve/transferFrom method\n // because you control the flow of tokens by approving this contract address,\n // but to make the contract an extensible example for later user I'll add this\n function cancelSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, //to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n\n //the signature must be valid\n require(signer == from, \"Invalid Signature for subscription cancellation\");\n\n //make sure it's the subscriber\n require(from == msg.sender, 'msg.sender is not the subscriber');\n\n //nextValidTimestamp should be a timestamp that will never\n //be reached during the brief window human existence\n nextValidTimestamp[subscriptionHash]=uint256(-1);\n\n emit CancelSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n return true;\n }\n\n // execute the transferFrom to pay the publisher from the subscriber\n // the subscriber has full control by approving this contract an allowance\n function executeSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, // to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n require(msg.sender == relayer);\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // make sure the subscription is valid and ready\n require( isSubscriptionReady(from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce, signature), \"Subscription is not ready or conditions of transction are not met\" );\n\n //increment the timestamp by the period so it wont be valid until then\n nextValidTimestamp[subscriptionHash] = block.timestamp.add(periodSeconds);\n\n //check to see if this nonce is larger than the current count and we'll set that for this 'from'\n if(nonce > extraNonce[from]){\n extraNonce[from] = nonce;\n }\n\n // now, let make the transfer from the subscriber to the publisher\n uint256 startingBalance = ERC20(tokenAddress).balanceOf(to);\n ERC20(tokenAddress).transferFrom(from,to,tokenAmount);\n require(\n (startingBalance+tokenAmount) == ERC20(tokenAddress).balanceOf(to),\n \"ERC20 Balance did not change correctly\"\n );\n\n require(\n checkSuccess(),\n \"Subscription::executeSubscription TransferFrom failed\"\n );\n\n\n emit ExecuteSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // it is possible for the subscription execution to be run by a third party\n // incentivized in the terms of the subscription with a gasPrice of the tokens\n // - pay that out now...\n if (gasPrice > 0) {\n //the relayer is incentivized by a little of the same token from\n // the subscriber ... as far as the subscriber knows, they are\n // just sending X tokens to the publisher, but the publisher can\n // choose to send Y of those X to a relayer to run their transactions\n // the publisher will receive X - Y tokens\n // this must all be setup in the constructor\n // if not, the subscriber chooses all the params including what goes\n // to the publisher and what goes to the relayer\n ERC20(tokenAddress).transferFrom(from, msg.sender, gasPrice);\n require(\n checkSuccess(),\n \"Subscription::executeSubscription Failed to pay gas as from account\"\n );\n }\n\n return true;\n }\n\n // because of issues with non-standard erc20s the transferFrom can always return false\n // to fix this we run it and then check the return of the previous function:\n // https://github.com/ethereum/solidity/issues/4116\n /**\n * Checks the return value of the previous function. Returns true if the previous function\n * function returned 32 non-zero bytes or returned zero bytes.\n */\n function checkSuccess(\n )\n private\n pure\n returns (bool)\n {\n uint256 returnValue = 0;\n\n /* solium-disable-next-line security/no-inline-assembly */\n assembly {\n // check number of bytes returned from last function call\n switch returndatasize\n\n // no bytes returned: assume success\n case 0x0 {\n returnValue := 1\n }\n\n // 32 bytes returned: check if non-zero\n case 0x20 {\n // copy 32 bytes into scratch space\n returndatacopy(0x0, 0x0, 0x20)\n\n // load those bytes into returnValue\n returnValue := mload(0x0)\n }\n\n // not sure what was returned: dont mark as success\n default { }\n }\n\n return returnValue != 0;\n }\n\n //we would like a way for the author to completly destroy the subscription\n // contract to prevent further transfers\n function endContract()\n external\n {\n require(msg.sender==author);\n selfdestruct(author);\n }\n\n // let's go ahead and revert any ETH sent directly to the contract\n function () external payable {\n revert ();\n }\n}\n", + "metadata": "{\"compiler\":{\"version\":\"0.5.2+commit.1df8f40c\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"requiredGasPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"subscriptionHash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"getSubscriptionSigner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredTokenAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"changeOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredToAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredPeriodSeconds\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"requiredTokenAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"cancelSubscription\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"relayer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contractVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"extraNonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"subscriptionHash\",\"type\":\"bytes32\"},{\"name\":\"gracePeriodSeconds\",\"type\":\"uint256\"}],\"name\":\"isSubscriptionActive\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"endContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"getSubscriptionHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"executeSubscription\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isSubscriptionReady\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextValidTimestamp\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_toAddress\",\"type\":\"address\"},{\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"name\":\"_tokenAmount\",\"type\":\"uint256\"},{\"name\":\"_periodSeconds\",\"type\":\"uint256\"},{\"name\":\"_gasPrice\",\"type\":\"uint256\"},{\"name\":\"_version\",\"type\":\"uint8\"},{\"name\":\"_relayer\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"ExecuteSubscription\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAddress\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"periodSeconds\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"CancelSubscription\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"ownershipChanged\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\":\"Subscription\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol\":{\"keccak256\":\"0x43c85edd952b07c020951e8722803e352346d9de2d4e238986ebcdd542c526be\",\"urls\":[\"bzzr://cc97df4fc13be767dbd247833986b668b9622c4fa0fa231292af8a70ef20a8a1\"]},\"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\":{\"keccak256\":\"0x0cbeb7f69b70ff62eb5536caebbc8701b6490ae7ee2e252d77891cf6eba11326\",\"urls\":[\"bzzr://58a443499466ee0706d22af81b43ab6779b519255fbc66276546386ec00a30d7\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xc2a200a877c4a9b2475c246c54ffecc69ffde3e11af83319c63c2dc5458bac80\",\"urls\":[\"bzzr://c8876e2c39b60f155d748d71d715c8f3903fae5a405ac599adcb6ad2f9a583f9\"]},\"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x3dceb7e4aa237a56111c13f77d7efadeceda7271d62bfac94ac79afab7c1f411\",\"urls\":[\"bzzr://2f34152a5bec385352002c31bc89f5e9935f628f1923ccea45c2281e0084a4db\"]},\"openzeppelin-solidity/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x59e7df16169a498cb8837963b2f5461d88e63bd1eb6c7d58b814d76b84ccbe61\",\"urls\":[\"bzzr://e572c9c4e02e37349702451bf3b5dcbbc86a19da5a51695b5b3e1bfe1e7825dc\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405160e080612562833981018060405260e081101561003057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550846004819055508360058190555082600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600060146101000a81548160ff021916908360ff1602179055505050505050505061239b806101c76000396000f3fe608060405260043610610126576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100b2578063bb6e7de911610081578063bb6e7de9146106c7578063c8147865146106de578063d3c576cd146107ab578063d933c06614610914578063ff59bff814610a7d57610126565b80638da5cb5b1461057d578063a0a8e460146105d4578063a3d53d1814610605578063ae702ba41461066a57610126565b8063384c3335116100f9578063384c3335146102e45780636b40bba11461033b5780636f264b2e1461036657806371d22d4d146103bd5780638406c0791461052657610126565b806310d920601461012b57806318f321a31461015657806329d428ca146102685780632af4c31e14610293575b600080fd5b34801561013757600080fd5b50610140610acc565b6040518082815260200191505060405180910390f35b34801561016257600080fd5b506102266004803603604081101561017957600080fd5b8101908080359060200190929190803590602001906401000000008111156101a057600080fd5b8201836020820111156101b257600080fd5b803590602001918460018302840111640100000000831117156101d457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ad2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027457600080fd5b5061027d610af7565b6040518082815260200191505060405180910390f35b34801561029f57600080fd5b506102e2600480360360208110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610afd565b005b3480156102f057600080fd5b506102f9610c53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034757600080fd5b50610350610c79565b6040518082815260200191505060405180910390f35b34801561037257600080fd5b5061037b610c7f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c957600080fd5b5061050c60048036036101008110156103e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561048657600080fd5b82018360208201111561049857600080fd5b803590602001918460018302840111640100000000831117156104ba57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ca5565b604051808215151515815260200191505060405180910390f35b34801561053257600080fd5b5061053b610eeb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561058957600080fd5b50610592610f11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e057600080fd5b506105e9610f36565b604051808260ff1660ff16815260200191505060405180910390f35b34801561061157600080fd5b506106546004803603602081101561062857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f49565b6040518082815260200191505060405180910390f35b34801561067657600080fd5b506106ad6004803603604081101561068d57600080fd5b810190808035906020019092919080359060200190929190505050610f61565b604051808215151515815260200191505060405180910390f35b3480156106d357600080fd5b506106dc610fd9565b005b3480156106ea57600080fd5b50610795600480360360e081101561070157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061106e565b6040518082815260200191505060405180910390f35b3480156107b757600080fd5b506108fa60048036036101008110156107cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561087457600080fd5b82018360208201111561088657600080fd5b803590602001918460018302840111640100000000831117156108a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061166b565b604051808215151515815260200191505060405180910390f35b34801561092057600080fd5b50610a63600480360361010081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109dd57600080fd5b8201836020820111156109ef57600080fd5b80359060200191846001830284011164010000000083111715610a1157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611db1565b604051808215151515815260200191505060405180910390f35b348015610a8957600080fd5b50610ab660048036036020811015610aa057600080fd5b810190808035906020019092919050505061208b565b6040518082815260200191505060405180910390f35b60065481565b6000610aef82610ae1856120a3565b6120fb90919063ffffffff16565b905092915050565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5857600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5d92051b4a9b6e7154c5be37e18edd17bfd2e650a3a6dbf8c3eded0ef431ff0e336000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610cb78a8a8a8a8a8a8a61106e565b90506000610cc58285610ad2565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612262602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060149054906101000a900460ff1681565b60086020528060005260406000206000915090505481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610fa75760009050610fd3565b610fcd82600760008681526020019081526020016000205461220290919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561103457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111195750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b151561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112375750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156112ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806112bd575060045485145b1515611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611343575060055484145b15156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806113c9575060065483145b151561143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116c957600080fd5b60006116da8a8a8a8a8a8a8a61106e565b90506116ec8a8a8a8a8a8a8a8a611db1565b1515611743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806123096041913960600191505060405180910390fd5b611756864261220290919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156117f95783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119a857600080fd5b505af11580156119bc573d6000803e3d6000fd5b505050506040513d60208110156119d257600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a7d57600080fd5b505afa158015611a91573d6000803e3d6000fd5b505050506040513d6020811015611aa757600080fd5b8101908080519060200190929190505050888201141515611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061234a6026913960400191505060405180910390fd5b611b1b612223565b1515611b72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806122916035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611d9f578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0357600080fd5b505af1158015611d17573d6000803e3d6000fd5b505050506040513d6020811015611d2d57600080fd5b810190808051906020019092919050505050611d47612223565b1515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806122c66043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611dc38a8a8a8a8a8a8a61106e565b90506000611dd18285610ad2565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ea257600080fd5b505afa158015611eb6573d6000803e3d6000fd5b505050506040513d6020811015611ecc57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561201e57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b801561203d575060076000858152602001908152602001600020544210155b801561205b5750612057888b61220290919063ffffffff16565b8210155b80156120795750612075888b61220290919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60006041825114151561211157600090506121fc565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260019004111561216657600093505050506121fc565b601b8160ff161415801561217e5750601c8160ff1614155b1561218f57600093505050506121fc565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ec573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561221957600080fd5b8091505092915050565b600080600090503d60008114612240576020811461224957612255565b60019150612255565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a723058202df60f746d4c742afa80c2f5e3dcb8e55b1f61d5cef42378807b775d5e0a17660029", + "deployedBytecode": "0x608060405260043610610126576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100b2578063bb6e7de911610081578063bb6e7de9146106c7578063c8147865146106de578063d3c576cd146107ab578063d933c06614610914578063ff59bff814610a7d57610126565b80638da5cb5b1461057d578063a0a8e460146105d4578063a3d53d1814610605578063ae702ba41461066a57610126565b8063384c3335116100f9578063384c3335146102e45780636b40bba11461033b5780636f264b2e1461036657806371d22d4d146103bd5780638406c0791461052657610126565b806310d920601461012b57806318f321a31461015657806329d428ca146102685780632af4c31e14610293575b600080fd5b34801561013757600080fd5b50610140610acc565b6040518082815260200191505060405180910390f35b34801561016257600080fd5b506102266004803603604081101561017957600080fd5b8101908080359060200190929190803590602001906401000000008111156101a057600080fd5b8201836020820111156101b257600080fd5b803590602001918460018302840111640100000000831117156101d457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ad2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561027457600080fd5b5061027d610af7565b6040518082815260200191505060405180910390f35b34801561029f57600080fd5b506102e2600480360360208110156102b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610afd565b005b3480156102f057600080fd5b506102f9610c53565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034757600080fd5b50610350610c79565b6040518082815260200191505060405180910390f35b34801561037257600080fd5b5061037b610c7f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c957600080fd5b5061050c60048036036101008110156103e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561048657600080fd5b82018360208201111561049857600080fd5b803590602001918460018302840111640100000000831117156104ba57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610ca5565b604051808215151515815260200191505060405180910390f35b34801561053257600080fd5b5061053b610eeb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561058957600080fd5b50610592610f11565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105e057600080fd5b506105e9610f36565b604051808260ff1660ff16815260200191505060405180910390f35b34801561061157600080fd5b506106546004803603602081101561062857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f49565b6040518082815260200191505060405180910390f35b34801561067657600080fd5b506106ad6004803603604081101561068d57600080fd5b810190808035906020019092919080359060200190929190505050610f61565b604051808215151515815260200191505060405180910390f35b3480156106d357600080fd5b506106dc610fd9565b005b3480156106ea57600080fd5b50610795600480360360e081101561070157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061106e565b6040518082815260200191505060405180910390f35b3480156107b757600080fd5b506108fa60048036036101008110156107cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561087457600080fd5b82018360208201111561088657600080fd5b803590602001918460018302840111640100000000831117156108a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061166b565b604051808215151515815260200191505060405180910390f35b34801561092057600080fd5b50610a63600480360361010081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109dd57600080fd5b8201836020820111156109ef57600080fd5b80359060200191846001830284011164010000000083111715610a1157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611db1565b604051808215151515815260200191505060405180910390f35b348015610a8957600080fd5b50610ab660048036036020811015610aa057600080fd5b810190808035906020019092919050505061208b565b6040518082815260200191505060405180910390f35b60065481565b6000610aef82610ae1856120a3565b6120fb90919063ffffffff16565b905092915050565b60045481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b5857600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5d92051b4a9b6e7154c5be37e18edd17bfd2e650a3a6dbf8c3eded0ef431ff0e336000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610cb78a8a8a8a8a8a8a61106e565b90506000610cc58285610ad2565b90508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612262602f913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515610df0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d73672e73656e646572206973206e6f7420746865207375627363726962657281525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000848152602001908152602001600020819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f51a97a25211c2be9b0b1dd64ee1de490cdb047390e6eba984e6a1d126e6ac4568b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a360019250505098975050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060149054906101000a900460ff1681565b60086020528060005260406000206000915090505481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60076000858152602001908152602001600020541415610fa75760009050610fd3565b610fcd82600760008681526020019081526020016000205461220290919063ffffffff16565b42111590505b92915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561103457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60008073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111195750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b151561118d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f7265717569726564546f41646472657373204661696c7572650000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112375750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15156112ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f7265717569726564546f6b656e41646472657373204661696c7572650000000081525060200191505060405180910390fd5b600060045414806112bd575060045485145b1515611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f7265717569726564546f6b656e416d6f756e74204661696c757265000000000081525060200191505060405180910390fd5b60006005541480611343575060055484145b15156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7265717569726564506572696f645365636f6e6473204661696c75726500000081525060200191505060405180910390fd5b600060065414806113c9575060065483145b151561143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f72657175697265644761735072696365204661696c757265000000000000000081525060200191505060405180910390fd5b60197f01000000000000000000000000000000000000000000000000000000000000000260007f010000000000000000000000000000000000000000000000000000000000000002308a8a8a8a8a8a604051602001808a7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101897effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050979650505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116c957600080fd5b60006116da8a8a8a8a8a8a8a61106e565b90506116ec8a8a8a8a8a8a8a8a611db1565b1515611743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806123096041913960600191505060405180910390fd5b611756864261220290919063ffffffff16565b6007600083815260200190815260200160002081905550600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156117f95783600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60008873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189457600080fd5b505afa1580156118a8573d6000803e3d6000fd5b505050506040513d60208110156118be57600080fd5b810190808051906020019092919050505090508873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c8c8b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156119a857600080fd5b505af11580156119bc573d6000803e3d6000fd5b505050506040513d60208110156119d257600080fd5b8101908080519060200190929190505050508873ffffffffffffffffffffffffffffffffffffffff166370a082318b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a7d57600080fd5b505afa158015611a91573d6000803e3d6000fd5b505050506040513d6020811015611aa757600080fd5b8101908080519060200190929190505050888201141515611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061234a6026913960400191505060405180910390fd5b611b1b612223565b1515611b72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806122916035913960400191505060405180910390fd5b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f96d296c945eee0618d3cc6f435f4d59f14bcefd708eab22c3de30df20b1347938b8b8b8b8b604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a36000861115611d9f578873ffffffffffffffffffffffffffffffffffffffff166323b872dd8c33896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0357600080fd5b505af1158015611d17573d6000803e3d6000fd5b505050506040513d6020811015611d2d57600080fd5b810190808051906020019092919050505050611d47612223565b1515611d9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260438152602001806122c66043913960600191505060405180910390fd5b5b60019250505098975050505050505050565b600080611dc38a8a8a8a8a8a8a61106e565b90506000611dd18285610ad2565b905060008973ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8d306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611ea257600080fd5b505afa158015611eb6573d6000803e3d6000fd5b505050506040513d6020811015611ecc57600080fd5b8101908080519060200190929190505050905060008a73ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f7a57600080fd5b505afa158015611f8e573d6000803e3d6000fd5b505050506040513d6020811015611fa457600080fd5b810190808051906020019092919050505090508c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561201e57508b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614155b801561203d575060076000858152602001908152602001600020544210155b801561205b5750612057888b61220290919063ffffffff16565b8210155b80156120795750612075888b61220290919063ffffffff16565b8110155b94505050505098975050505050505050565b60076020528060005260406000206000915090505481565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b60006041825114151561211157600090506121fc565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260019004111561216657600093505050506121fc565b601b8160ff161415801561217e5750601c8160ff1614155b1561218f57600093505050506121fc565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156121ec573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600080828401905083811015151561221957600080fd5b8091505092915050565b600080600090503d60008114612240576020811461224957612255565b60019150612255565b60206000803e60005191505b5060008114159150509056fe496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d657445524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79a165627a7a723058202df60f746d4c742afa80c2f5e3dcb8e55b1f61d5cef42378807b775d5e0a17660029", + "sourceMap": "1091:13546:1:-;;;3265:515;8:9:-1;5:2;;;30:1;27;20:12;5:2;3265:515:1;;;;;;;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;3265:515:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3516:10;3498:17;;:28;;;;;;;;;;;;;;;;;;3557:13;3536:20;;:34;;;;;;;;;;;;;;;;;;3600:12;3580:19;:32;;;;3644:14;3622:21;:36;;;;3685:9;3668:16;:26;;;;3710:10;3704:5;;:16;;;;;;;;;;;;;;;;;;3738:8;3730:7;;:16;;;;;;;;;;;;;;;;;;3772:1;3756:15;;:17;;;;;;;;;;;;;;;;;;3265:515;;;;;;;1091:13546;;;;;;", + "deployedSourceMap": "1091:13546:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14619:9;;;1664:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1664:31:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6364:318;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6364:318:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6364:318:1;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6364:318:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6364:318:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6364:318:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6364:318:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1582:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1582:34:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3786:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3786:183:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3786:183:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;1503:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1503:32:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1622:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1622:36:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1541:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1541:35:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8320:1423;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8320:1423:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8320:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;8320:1423:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;8320:1423:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;8320:1423:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;8320:1423:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1321:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1321:22:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1212:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1212:28:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1246;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1246:28:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2121:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2121:45:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2121:45:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4209:390;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4209:390:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4209:390:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14392:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14392:112:1;;;:::i;:::-;;4755:1548;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4755:1548:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;4755:1548:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9901:3091;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9901:3091:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9901:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9901:3091:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9901:3091:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9901:3091:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9901:3091:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6805:1261;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6805:1261:1;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6805:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6805:1261:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6805:1261:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6805:1261:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6805:1261:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1887:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1887:53:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1887:53:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1664:31;;;;:::o;6364:318::-;6585:7;6615:60;6665:9;6615:41;:16;:39;:41::i;:::-;:49;;:60;;;;:::i;:::-;6608:67;;6364:318;;;;:::o;1582:34::-;;;;:::o;3786:183::-;3883:5;;;;;;;;;;;3871:17;;:10;:17;;;3863:26;;;;;;;;3905:9;3897:5;;:17;;;;;;;;;;;;;;;;;;3927:35;3944:10;3956:5;;;;;;;;;;;3927:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3786:183;:::o;1503:32::-;;;;;;;;;;;;;:::o;1622:36::-;;;;:::o;1541:35::-;;;;;;;;;;;;;:::o;8320:1423::-;8923:12;8951:24;8978:110;9011:4;9017:2;9021:12;9035:11;9048:13;9063:8;9073:5;8978:19;:110::i;:::-;8951:137;;9098:14;9115:50;9137:16;9155:9;9115:21;:50::i;:::-;9098:67;;9232:4;9222:14;;:6;:14;;;9214:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9355:10;9347:18;;:4;:18;;;9339:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9586:2;9541:18;:36;9560:16;9541:36;;;;;;;;;;;:48;;;;9643:2;9605:109;;9637:4;9605:109;;;9647:12;9661:11;9674:13;9689:8;9699:5;9605:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9732:4;9725:11;;;;8320:1423;;;;;;;;;;:::o;1321:22::-;;;;;;;;;;;;;:::o;1212:28::-;;;;;;;;;;;;;:::o;1246:::-;;;;;;;;;;;;;:::o;2121:45::-;;;;;;;;;;;;;;;;;:::o;4209:390::-;4362:4;4431:2;4385:18;:36;4404:16;4385:36;;;;;;;;;;;;:49;4382:88;;;4454:5;4447:12;;;;4382:88;4522:60;4563:18;4522;:36;4541:16;4522:36;;;;;;;;;;;;:40;;:60;;;;:::i;:::-;4487:15;:95;;4479:113;;4209:390;;;;;:::o;14392:112::-;14464:5;;;;;;;;;;;14452:17;;:10;:17;;;14444:26;;;;;;;;14491:5;;;;;;;;;;;14478:19;;;4755:1548;5291:7;5457:1;5428:31;;:17;;;;;;;;;;;:31;;;:58;;;;5469:17;;;;;;;;;;;5463:23;;:2;:23;;;5428:58;5419:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5568:1;5536:34;;:20;;;;;;;;;;;:34;;;:74;;;;5590:20;;;;;;;;;;;5574:36;;:12;:36;;;5536:74;5527:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5687:1;5664:19;;:24;:62;;;;5707:19;;5692:11;:34;5664:62;5655:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5804:1;5779:21;;:26;:68;;;;5826:21;;5809:13;:38;5779:68;5770:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5922:1;5902:16;;:21;:53;;;;5939:16;;5927:8;:28;5902:53;5893:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6066:4;6061:10;;6094:1;6089:7;;6122:4;6145;6167:2;6187:12;6217:11;6246:13;6277:8;6027:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6027:268:1;;;6004:292;;;;;;5997:299;;4755:1548;;;;;;;;;:::o;9901:3091::-;10506:12;10556:7;;;;;;;;;;;10542:21;;:10;:21;;;10534:30;;;;;;;;10574:24;10601:110;10634:4;10640:2;10644:12;10658:11;10671:13;10686:8;10696:5;10601:19;:110::i;:::-;10574:137;;10788:99;10808:4;10814:2;10818:12;10832:11;10845:13;10860:8;10870:5;10877:9;10788:19;:99::i;:::-;10779:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11087:34;11107:13;11087:15;:19;;:34;;;;:::i;:::-;11048:18;:36;11067:16;11048:36;;;;;;;;;;;:73;;;;11248:10;:16;11259:4;11248:16;;;;;;;;;;;;;;;;11240:5;:24;11237:75;;;11296:5;11277:10;:16;11288:4;11277:16;;;;;;;;;;;;;;;:24;;;;11237:75;11397:23;11429:12;11423:29;;;11453:2;11423:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11423:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11423:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11423:33:1;;;;;;;;;;;;;;;;11397:59;;11472:12;11466:32;;;11499:4;11504:2;11507:11;11466:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11466:53:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11466:53:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11466:53:1;;;;;;;;;;;;;;;;;11587:12;11581:29;;;11611:2;11581:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11581:33:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11581:33:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11581:33:1;;;;;;;;;;;;;;;;11565:11;11549:15;:27;11548:66;11529:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11706:14;:12;:14::i;:::-;11687:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11855:2;11816:110;;11849:4;11816:110;;;11859:12;11873:11;11886:13;11901:8;11911:5;11816:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12157:1;12146:8;:12;12142:822;;;12745:12;12739:32;;;12772:4;12778:10;12790:8;12739:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12739:60:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12739:60:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12739:60:1;;;;;;;;;;;;;;;;;12838:14;:12;:14::i;:::-;12813:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12142:822;12981:4;12974:11;;;;9901:3091;;;;;;;;;;:::o;6805:1261::-;7423:4;7443:24;7470:110;7503:4;7509:2;7513:12;7527:11;7540:13;7555:8;7565:5;7470:19;:110::i;:::-;7443:137;;7590:14;7607:50;7629:16;7647:9;7607:21;:50::i;:::-;7590:67;;7667:17;7693:12;7687:29;;;7717:4;7731;7687:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7687:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7687:50:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7687:50:1;;;;;;;;;;;;;;;;7667:70;;7747:15;7771:12;7765:29;;;7795:4;7765:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7765:35:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7765:35:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7765:35:1;;;;;;;;;;;;;;;;7747:53;;7842:4;7832:14;;:6;:14;;;:40;;;;;7870:2;7862:10;;:4;:10;;;;7832:40;:111;;;;;7907:18;:36;7926:16;7907:36;;;;;;;;;;;;7888:15;:55;;7832:111;:165;;;;;7972:25;7988:8;7972:11;:15;;:25;;;;:::i;:::-;7959:9;:38;;7832:165;:217;;;;;8024:25;8040:8;8024:11;:15;;:25;;;;:::i;:::-;8013:7;:36;;7832:217;7811:248;;;;;;6805:1261;;;;;;;;;;:::o;1887:53::-;;;;;;;;;;;;;;;;;:::o;2650:265:2:-;2719:7;2902:4;2849:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2849:58:2;;;2839:69;;;;;;2832:76;;2650:265;;;:::o;609:1891::-;687:7;768:2;748:9;:16;:22;;744:72;;;802:1;786:19;;;;744:72;882:9;901;920:7;1166:4;1155:9;1151:20;1145:27;1140:32;;1211:4;1200:9;1196:20;1190:27;1185:32;;1264:4;1253:9;1249:20;1243:27;1240:1;1235:36;1230:41;;2182:66;2177:1;2169:10;;;:79;2165:127;;;2279:1;2264:17;;;;;;;2165:127;2311:2;2306:1;:7;;;;:18;;;;;2322:2;2317:1;:7;;;;2306:18;2302:66;;;2355:1;2340:17;;;;;;;2302:66;2469:24;2479:4;2485:1;2488;2491;2469:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2469:24:2;;;;;;;;2462:31;;;;;609:1891;;;;;:::o;1439:145:3:-;1497:7;1516:9;1532:1;1528;:5;1516:17;;1556:1;1551;:6;;1543:15;;;;;;;;1576:1;1569:8;;;1439:145;;;;:::o;13407:855:1:-;13482:4;13502:19;13524:1;13502:23;;13703:14;13785:3;13780:57;;;;13908:4;13903:220;;;;13696:516;;13780:57;13822:1;13807:16;;13780:57;;13903:220;14008:4;14003:3;13998;13983:30;14105:3;14099:10;14084:25;;13696:516;;14254:1;14239:11;:16;;14232:23;;;13407:855;:::o", + "source": "pragma solidity ^0.5.2;\n\n/*\n Super Simple Token Subscriptions - https://tokensubscription.com\n //// Breakin’ Through @ University of Wyoming ////\n Austin Thomas Griffith - https://austingriffith.com\n Building on previous works:\n https://github.com/austintgriffith/token-subscription\n https://gist.github.com/androolloyd/0a62ef48887be00a5eff5c17f2be849a\n https://media.consensys.net/subscription-services-on-the-blockchain-erc-948-6ef64b083a36\n https://medium.com/gitcoin/technical-deep-dive-architecture-choices-for-subscriptions-on-the-blockchain-erc948-5fae89cabc7a\n https://github.com/ethereum/EIPs/pull/1337\n https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1077.md\n https://github.com/gnosis/safe-contracts\n Earlier Meta Transaction Demo:\n https://github.com/austintgriffith/bouncer-proxy\n Huge thanks, as always, to OpenZeppelin for the rad contracts:\n */\n\nimport \"openzeppelin-solidity/contracts/cryptography/ECDSA.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\n\n\ncontract Subscription {\n using ECDSA for bytes32;\n using SafeMath for uint256;\n\n //who deploys the contract\n address payable public owner;\n uint8 public contractVersion;\n\n //restrict who can relay the metatx\n address public relayer;\n\n // the publisher may optionally deploy requirements for the subscription\n // so only meta transactions that match the requirements can be relayed\n address public requiredToAddress;\n address public requiredTokenAddress;\n uint256 public requiredTokenAmount;\n uint256 public requiredPeriodSeconds;\n uint256 public requiredGasPrice;\n\n\n // similar to a nonce that avoids replay attacks this allows a single execution\n // every x seconds for a given subscription\n // subscriptionHash => next valid block number\n mapping(bytes32 => uint256) public nextValidTimestamp;\n\n //we'll use a nonce for each from but because transactions can go through\n //multiple times, we allow anything but users can use this as a signal for\n //uniqueness\n mapping(address => uint256) public extraNonce;\n\n event ExecuteSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event CancelSubscription(\n address indexed from, //the subscriber\n address indexed to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n );\n\n event ownershipChanged(\n address oldOwner,\n address newOwner\n );\n\n constructor(\n address _toAddress,\n address _tokenAddress,\n uint256 _tokenAmount,\n uint256 _periodSeconds,\n uint256 _gasPrice,\n uint8 _version,\n address _relayer\n ) public {\n requiredToAddress=_toAddress;\n requiredTokenAddress=_tokenAddress;\n requiredTokenAmount=_tokenAmount;\n requiredPeriodSeconds=_periodSeconds;\n requiredGasPrice=_gasPrice;\n owner=msg.sender;\n relayer=_relayer;\n contractVersion=1;\n }\n\n function changeOwnership(address payable _newOwner)\n public\n {\n require(msg.sender==owner);\n owner = _newOwner;\n emit ownershipChanged(msg.sender, owner);\n }\n\n // this is used by external smart contracts to verify on-chain that a\n // particular subscription is \"paid\" and \"active\"\n // there must be a small grace period added to allow the publisher\n // or desktop miner to execute\n function isSubscriptionActive(\n bytes32 subscriptionHash,\n uint256 gracePeriodSeconds\n )\n external\n view\n returns (bool)\n {\n if(nextValidTimestamp[subscriptionHash]==uint256(-1)){\n return false;\n }\n return (block.timestamp <=\n nextValidTimestamp[subscriptionHash].add(gracePeriodSeconds)\n );\n }\n\n // given the subscription details, generate a hash and try to kind of follow\n // the eip-191 standard and eip-1077 standard from my dude @avsa\n function getSubscriptionHash(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce // to allow multiple subscriptions with the same parameters\n )\n public\n view\n returns (bytes32)\n {\n // if there are requirements from the deployer, let's make sure\n // those are met exactly\n require( requiredToAddress == address(0) || to == requiredToAddress, \"requiredToAddress Failure\" );\n require( requiredTokenAddress == address(0) || tokenAddress == requiredTokenAddress, \"requiredTokenAddress Failure\" );\n require( requiredTokenAmount == 0 || tokenAmount == requiredTokenAmount, \"requiredTokenAmount Failure\" );\n require( requiredPeriodSeconds == 0 || periodSeconds == requiredPeriodSeconds, \"requiredPeriodSeconds Failure\" );\n require( requiredGasPrice == 0 || gasPrice == requiredGasPrice, \"requiredGasPrice Failure\" );\n\n return keccak256(\n abi.encodePacked(\n byte(0x19),\n byte(0),\n address(this),\n from,\n to,\n tokenAddress,\n tokenAmount,\n periodSeconds,\n gasPrice\n ));\n }\n\n //ecrecover the signer from hash and the signature\n function getSubscriptionSigner(\n bytes32 subscriptionHash, //hash of subscription\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n pure\n returns (address)\n {\n return subscriptionHash.toEthSignedMessageHash().recover(signature);\n }\n\n //check if a subscription is signed correctly and the timestamp is ready for\n // the next execution to happen\n function isSubscriptionReady(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of the token to incentivize the relay network\n uint256 nonce,// to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n view\n returns (bool)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n uint256 allowance = ERC20(tokenAddress).allowance(from, address(this));\n uint256 balance = ERC20(tokenAddress).balanceOf(from);\n\n return (\n signer == from &&\n from != to &&\n block.timestamp >= nextValidTimestamp[subscriptionHash] &&\n allowance >= tokenAmount.add(gasPrice) &&\n balance >= tokenAmount.add(gasPrice)\n );\n }\n\n // you don't really need this if you are using the approve/transferFrom method\n // because you control the flow of tokens by approving this contract address,\n // but to make the contract an extensible example for later user I'll add this\n function cancelSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, //to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n address signer = getSubscriptionSigner(subscriptionHash, signature);\n\n //the signature must be valid\n require(signer == from, \"Invalid Signature for subscription cancellation\");\n\n //make sure it's the subscriber\n require(from == msg.sender, 'msg.sender is not the subscriber');\n\n //nextValidTimestamp should be a timestamp that will never\n //be reached during the brief window human existence\n nextValidTimestamp[subscriptionHash]=uint256(-1);\n\n emit CancelSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n return true;\n }\n\n // execute the transferFrom to pay the publisher from the subscriber\n // the subscriber has full control by approving this contract an allowance\n function executeSubscription(\n address from, //the subscriber\n address to, //the publisher\n address tokenAddress, //the token address paid to the publisher\n uint256 tokenAmount, //the token amount paid to the publisher\n uint256 periodSeconds, //the period in seconds between payments\n uint256 gasPrice, //the amount of tokens or eth to pay relayer (0 for free)\n uint256 nonce, // to allow multiple subscriptions with the same parameters\n bytes memory signature //proof the subscriber signed the meta trasaction\n )\n public\n returns (bool success)\n {\n require(msg.sender == relayer);\n bytes32 subscriptionHash = getSubscriptionHash(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // make sure the subscription is valid and ready\n require( isSubscriptionReady(from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce, signature), \"Subscription is not ready or conditions of transction are not met\" );\n\n //increment the timestamp by the period so it wont be valid until then\n nextValidTimestamp[subscriptionHash] = block.timestamp.add(periodSeconds);\n\n //check to see if this nonce is larger than the current count and we'll set that for this 'from'\n if(nonce > extraNonce[from]){\n extraNonce[from] = nonce;\n }\n\n // now, let make the transfer from the subscriber to the publisher\n uint256 startingBalance = ERC20(tokenAddress).balanceOf(to);\n ERC20(tokenAddress).transferFrom(from,to,tokenAmount);\n require(\n (startingBalance+tokenAmount) == ERC20(tokenAddress).balanceOf(to),\n \"ERC20 Balance did not change correctly\"\n );\n\n require(\n checkSuccess(),\n \"Subscription::executeSubscription TransferFrom failed\"\n );\n\n\n emit ExecuteSubscription(\n from, to, tokenAddress, tokenAmount, periodSeconds, gasPrice, nonce\n );\n\n // it is possible for the subscription execution to be run by a third party\n // incentivized in the terms of the subscription with a gasPrice of the tokens\n // - pay that out now...\n if (gasPrice > 0) {\n //the relayer is incentivized by a little of the same token from\n // the subscriber ... as far as the subscriber knows, they are\n // just sending X tokens to the publisher, but the publisher can\n // choose to send Y of those X to a relayer to run their transactions\n // the publisher will receive X - Y tokens\n // this must all be setup in the constructor\n // if not, the subscriber chooses all the params including what goes\n // to the publisher and what goes to the relayer\n ERC20(tokenAddress).transferFrom(from, msg.sender, gasPrice);\n require(\n checkSuccess(),\n \"Subscription::executeSubscription Failed to pay gas as from account\"\n );\n }\n\n return true;\n }\n\n // because of issues with non-standard erc20s the transferFrom can always return false\n // to fix this we run it and then check the return of the previous function:\n // https://github.com/ethereum/solidity/issues/4116\n /**\n * Checks the return value of the previous function. Returns true if the previous function\n * function returned 32 non-zero bytes or returned zero bytes.\n */\n function checkSuccess(\n )\n private\n pure\n returns (bool)\n {\n uint256 returnValue = 0;\n\n /* solium-disable-next-line security/no-inline-assembly */\n assembly {\n // check number of bytes returned from last function call\n switch returndatasize\n\n // no bytes returned: assume success\n case 0x0 {\n returnValue := 1\n }\n\n // 32 bytes returned: check if non-zero\n case 0x20 {\n // copy 32 bytes into scratch space\n returndatacopy(0x0, 0x0, 0x20)\n\n // load those bytes into returnValue\n returnValue := mload(0x0)\n }\n\n // not sure what was returned: dont mark as success\n default { }\n }\n\n return returnValue != 0;\n }\n\n //we would like a way for the author to completly destroy the subscription\n // contract to prevent further transfers\n function endContract()\n external\n {\n require(msg.sender==owner);\n selfdestruct(owner);\n }\n\n // let's go ahead and revert any ETH sent directly to the contract\n function () external payable {\n revert ();\n }\n}\n", "sourcePath": "/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol", "ast": { "absolutePath": "/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol", "exportedSymbols": { "Subscription": [ - 675 + 710 ] }, - "id": 676, + "id": 711, "nodeType": "SourceUnit", "nodes": [ { @@ -534,8 +579,8 @@ "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol", "id": 59, "nodeType": "ImportDirective", - "scope": 676, - "sourceUnit": 757, + "scope": 711, + "sourceUnit": 792, "src": "900:64:1", "symbolAliases": [], "unitAlias": "" @@ -545,8 +590,8 @@ "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", "id": 60, "nodeType": "ImportDirective", - "scope": 676, - "sourceUnit": 885, + "scope": 711, + "sourceUnit": 920, "src": "965:59:1", "symbolAliases": [], "unitAlias": "" @@ -556,8 +601,8 @@ "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", "id": 61, "nodeType": "ImportDirective", - "scope": 676, - "sourceUnit": 1268, + "scope": 711, + "sourceUnit": 1303, "src": "1025:63:1", "symbolAliases": [], "unitAlias": "" @@ -568,9 +613,9 @@ "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 675, + "id": 710, "linearizedBaseContracts": [ - 675 + 710 ], "name": "Subscription", "nodeType": "ContractDefinition", @@ -582,10 +627,10 @@ "id": 62, "name": "ECDSA", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 756, + "referencedDeclaration": 791, "src": "1125:5:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ECDSA_$756", + "typeIdentifier": "t_contract$_ECDSA_$791", "typeString": "library ECDSA" } }, @@ -609,10 +654,10 @@ "id": 65, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 884, + "referencedDeclaration": 919, "src": "1154:8:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$884", + "typeIdentifier": "t_contract$_SafeMath_$919", "typeString": "library SafeMath" } }, @@ -632,10 +677,10 @@ { "constant": false, "id": 69, - "name": "author", + "name": "owner", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1212:29:1", + "scope": 710, + "src": "1212:28:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -659,10 +704,36 @@ { "constant": false, "id": 71, + "name": "contractVersion", + "nodeType": "VariableDeclaration", + "scope": 710, + "src": "1246:28:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 70, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1246:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 73, "name": "relayer", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1288:22:1", + "scope": 710, + "src": "1321:22:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -670,10 +741,10 @@ "typeString": "address" }, "typeName": { - "id": 70, + "id": 72, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1288:7:1", + "src": "1321:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -685,11 +756,11 @@ }, { "constant": false, - "id": 73, + "id": 75, "name": "requiredToAddress", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1470:32:1", + "scope": 710, + "src": "1503:32:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -697,10 +768,10 @@ "typeString": "address" }, "typeName": { - "id": 72, + "id": 74, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1470:7:1", + "src": "1503:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -712,11 +783,11 @@ }, { "constant": false, - "id": 75, + "id": 77, "name": "requiredTokenAddress", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1508:35:1", + "scope": 710, + "src": "1541:35:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -724,10 +795,10 @@ "typeString": "address" }, "typeName": { - "id": 74, + "id": 76, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1508:7:1", + "src": "1541:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -739,11 +810,11 @@ }, { "constant": false, - "id": 77, + "id": 79, "name": "requiredTokenAmount", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1549:34:1", + "scope": 710, + "src": "1582:34:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -751,10 +822,10 @@ "typeString": "uint256" }, "typeName": { - "id": 76, + "id": 78, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1549:7:1", + "src": "1582:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -765,11 +836,11 @@ }, { "constant": false, - "id": 79, + "id": 81, "name": "requiredPeriodSeconds", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1589:36:1", + "scope": 710, + "src": "1622:36:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -777,10 +848,10 @@ "typeString": "uint256" }, "typeName": { - "id": 78, + "id": 80, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1589:7:1", + "src": "1622:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -791,11 +862,11 @@ }, { "constant": false, - "id": 81, + "id": 83, "name": "requiredGasPrice", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1631:31:1", + "scope": 710, + "src": "1664:31:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -803,10 +874,10 @@ "typeString": "uint256" }, "typeName": { - "id": 80, + "id": 82, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1631:7:1", + "src": "1664:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -817,11 +888,11 @@ }, { "constant": false, - "id": 85, + "id": 87, "name": "nextValidTimestamp", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1854:53:1", + "scope": 710, + "src": "1887:53:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -829,28 +900,28 @@ "typeString": "mapping(bytes32 => uint256)" }, "typeName": { - "id": 84, + "id": 86, "keyType": { - "id": 82, + "id": 84, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1862:7:1", + "src": "1895:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", - "src": "1854:27:1", + "src": "1887:27:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "valueType": { - "id": 83, + "id": 85, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1873:7:1", + "src": "1906:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -862,11 +933,11 @@ }, { "constant": false, - "id": 89, + "id": 91, "name": "extraNonce", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "2088:45:1", + "scope": 710, + "src": "2121:45:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -874,28 +945,28 @@ "typeString": "mapping(address => uint256)" }, "typeName": { - "id": 88, + "id": 90, "keyType": { - "id": 86, + "id": 88, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2096:7:1", + "src": "2129:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Mapping", - "src": "2088:27:1", + "src": "2121:27:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" }, "valueType": { - "id": 87, + "id": 89, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2107:7:1", + "src": "2140:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -908,21 +979,21 @@ { "anonymous": false, "documentation": null, - "id": 105, + "id": 107, "name": "ExecuteSubscription", "nodeType": "EventDefinition", "parameters": { - "id": 104, + "id": 106, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 91, + "id": 93, "indexed": true, "name": "from", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2175:20:1", + "scope": 107, + "src": "2208:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -930,10 +1001,10 @@ "typeString": "address" }, "typeName": { - "id": 90, + "id": 92, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2175:7:1", + "src": "2208:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -945,12 +1016,12 @@ }, { "constant": false, - "id": 93, + "id": 95, "indexed": true, "name": "to", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2222:18:1", + "scope": 107, + "src": "2255:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -958,10 +1029,10 @@ "typeString": "address" }, "typeName": { - "id": 92, + "id": 94, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2222:7:1", + "src": "2255:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -973,12 +1044,12 @@ }, { "constant": false, - "id": 95, + "id": 97, "indexed": false, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2266:20:1", + "scope": 107, + "src": "2299:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -986,10 +1057,10 @@ "typeString": "address" }, "typeName": { - "id": 94, + "id": 96, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2266:7:1", + "src": "2299:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1001,12 +1072,12 @@ }, { "constant": false, - "id": 97, + "id": 99, "indexed": false, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2338:19:1", + "scope": 107, + "src": "2371:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1014,10 +1085,10 @@ "typeString": "uint256" }, "typeName": { - "id": 96, + "id": 98, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2338:7:1", + "src": "2371:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1028,12 +1099,12 @@ }, { "constant": false, - "id": 99, + "id": 101, "indexed": false, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2408:21:1", + "scope": 107, + "src": "2441:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1041,10 +1112,10 @@ "typeString": "uint256" }, "typeName": { - "id": 98, + "id": 100, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2408:7:1", + "src": "2441:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1055,12 +1126,12 @@ }, { "constant": false, - "id": 101, + "id": 103, "indexed": false, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2480:16:1", + "scope": 107, + "src": "2513:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1068,10 +1139,10 @@ "typeString": "uint256" }, "typeName": { - "id": 100, + "id": 102, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2480:7:1", + "src": "2513:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1082,12 +1153,12 @@ }, { "constant": false, - "id": 103, + "id": 105, "indexed": false, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2557:13:1", + "scope": 107, + "src": "2590:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1095,10 +1166,10 @@ "typeString": "uint256" }, "typeName": { - "id": 102, + "id": 104, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2557:7:1", + "src": "2590:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1108,28 +1179,28 @@ "visibility": "internal" } ], - "src": "2165:471:1" + "src": "2198:471:1" }, - "src": "2140:497:1" + "src": "2173:497:1" }, { "anonymous": false, "documentation": null, - "id": 121, + "id": 123, "name": "CancelSubscription", "nodeType": "EventDefinition", "parameters": { - "id": 120, + "id": 122, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 107, + "id": 109, "indexed": true, "name": "from", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2677:20:1", + "scope": 123, + "src": "2710:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1137,10 +1208,10 @@ "typeString": "address" }, "typeName": { - "id": 106, + "id": 108, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2677:7:1", + "src": "2710:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1152,12 +1223,12 @@ }, { "constant": false, - "id": 109, + "id": 111, "indexed": true, "name": "to", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2724:18:1", + "scope": 123, + "src": "2757:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1165,10 +1236,10 @@ "typeString": "address" }, "typeName": { - "id": 108, + "id": 110, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2724:7:1", + "src": "2757:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1180,12 +1251,12 @@ }, { "constant": false, - "id": 111, + "id": 113, "indexed": false, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2768:20:1", + "scope": 123, + "src": "2801:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1193,10 +1264,10 @@ "typeString": "address" }, "typeName": { - "id": 110, + "id": 112, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2768:7:1", + "src": "2801:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1208,12 +1279,12 @@ }, { "constant": false, - "id": 113, + "id": 115, "indexed": false, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2840:19:1", + "scope": 123, + "src": "2873:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1221,10 +1292,10 @@ "typeString": "uint256" }, "typeName": { - "id": 112, + "id": 114, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2840:7:1", + "src": "2873:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1235,12 +1306,12 @@ }, { "constant": false, - "id": 115, + "id": 117, "indexed": false, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2910:21:1", + "scope": 123, + "src": "2943:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1248,10 +1319,10 @@ "typeString": "uint256" }, "typeName": { - "id": 114, + "id": 116, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2910:7:1", + "src": "2943:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1262,12 +1333,12 @@ }, { "constant": false, - "id": 117, + "id": 119, "indexed": false, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2982:16:1", + "scope": 123, + "src": "3015:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1275,10 +1346,10 @@ "typeString": "uint256" }, "typeName": { - "id": 116, + "id": 118, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2982:7:1", + "src": "3015:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1289,12 +1360,12 @@ }, { "constant": false, - "id": 119, + "id": 121, "indexed": false, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "3059:13:1", + "scope": 123, + "src": "3092:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1302,10 +1373,10 @@ "typeString": "uint256" }, "typeName": { - "id": 118, + "id": 120, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3059:7:1", + "src": "3092:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1315,32 +1386,103 @@ "visibility": "internal" } ], - "src": "2667:471:1" + "src": "2700:471:1" + }, + "src": "2676:496:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 129, + "name": "ownershipChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 128, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 125, + "indexed": false, + "name": "oldOwner", + "nodeType": "VariableDeclaration", + "scope": 129, + "src": "3210:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 124, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3210:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 127, + "indexed": false, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 129, + "src": "3236:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3236:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3200:58:1" }, - "src": "2643:496:1" + "src": "3178:81:1" }, { "body": { - "id": 167, + "id": 179, "nodeType": "Block", - "src": "3368:266:1", + "src": "3488:292:1", "statements": [ { "expression": { "argumentTypes": null, - "id": 140, + "id": 148, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 138, + "id": 146, "name": "requiredToAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "3378:17:1", + "referencedDeclaration": 75, + "src": "3498:17:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -1350,43 +1492,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 139, + "id": 147, "name": "_toAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 123, - "src": "3396:10:1", + "referencedDeclaration": 131, + "src": "3516:10:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3378:28:1", + "src": "3498:28:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 141, + "id": 149, "nodeType": "ExpressionStatement", - "src": "3378:28:1" + "src": "3498:28:1" }, { "expression": { "argumentTypes": null, - "id": 144, + "id": 152, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 142, + "id": 150, "name": "requiredTokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "3416:20:1", + "referencedDeclaration": 77, + "src": "3536:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -1396,43 +1538,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 143, + "id": 151, "name": "_tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "3437:13:1", + "referencedDeclaration": 133, + "src": "3557:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3416:34:1", + "src": "3536:34:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 145, + "id": 153, "nodeType": "ExpressionStatement", - "src": "3416:34:1" + "src": "3536:34:1" }, { "expression": { "argumentTypes": null, - "id": 148, + "id": 156, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 146, + "id": 154, "name": "requiredTokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "3460:19:1", + "referencedDeclaration": 79, + "src": "3580:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1442,43 +1584,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 147, + "id": 155, "name": "_tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 127, - "src": "3480:12:1", + "referencedDeclaration": 135, + "src": "3600:12:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3460:32:1", + "src": "3580:32:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 149, + "id": 157, "nodeType": "ExpressionStatement", - "src": "3460:32:1" + "src": "3580:32:1" }, { "expression": { "argumentTypes": null, - "id": 152, + "id": 160, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 150, + "id": 158, "name": "requiredPeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "3502:21:1", + "referencedDeclaration": 81, + "src": "3622:21:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1488,43 +1630,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 151, + "id": 159, "name": "_periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 129, - "src": "3524:14:1", + "referencedDeclaration": 137, + "src": "3644:14:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3502:36:1", + "src": "3622:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 153, + "id": 161, "nodeType": "ExpressionStatement", - "src": "3502:36:1" + "src": "3622:36:1" }, { "expression": { "argumentTypes": null, - "id": 156, + "id": 164, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 154, + "id": 162, "name": "requiredGasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "3548:16:1", + "referencedDeclaration": 83, + "src": "3668:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1534,43 +1676,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 155, + "id": 163, "name": "_gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 131, - "src": "3565:9:1", + "referencedDeclaration": 139, + "src": "3685:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3548:26:1", + "src": "3668:26:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 157, + "id": 165, "nodeType": "ExpressionStatement", - "src": "3548:26:1" + "src": "3668:26:1" }, { "expression": { "argumentTypes": null, - "id": 161, + "id": 169, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 158, - "name": "author", + "id": 166, + "name": "owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 69, - "src": "3584:6:1", + "src": "3704:5:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -1582,18 +1724,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 159, + "id": 167, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "3591:3:1", + "referencedDeclaration": 1386, + "src": "3710:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 160, + "id": 168, "isConstant": false, "isLValue": false, "isPure": false, @@ -1601,38 +1743,38 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "3591:10:1", + "src": "3710:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "3584:17:1", + "src": "3704:16:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "id": 162, + "id": 170, "nodeType": "ExpressionStatement", - "src": "3584:17:1" + "src": "3704:16:1" }, { "expression": { "argumentTypes": null, - "id": 165, + "id": 173, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 163, + "id": 171, "name": "relayer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "3611:7:1", + "referencedDeclaration": 73, + "src": "3730:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -1642,47 +1784,98 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 164, + "id": 172, "name": "_relayer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 135, - "src": "3619:8:1", + "referencedDeclaration": 143, + "src": "3738:8:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3611:16:1", + "src": "3730:16:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 166, + "id": 174, "nodeType": "ExpressionStatement", - "src": "3611:16:1" - } - ] - }, - "documentation": null, - "id": 168, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 136, - "nodeType": "ParameterList", - "parameters": [ + "src": "3730:16:1" + }, { - "constant": false, - "id": 123, - "name": "_toAddress", + "expression": { + "argumentTypes": null, + "id": 177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 175, + "name": "contractVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "3756:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "31", + "id": 176, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3772:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3756:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 178, + "nodeType": "ExpressionStatement", + "src": "3756:17:1" + } + ] + }, + "documentation": null, + "id": 180, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 144, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 131, + "name": "_toAddress", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3166:18:1", + "scope": 180, + "src": "3286:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1690,10 +1883,10 @@ "typeString": "address" }, "typeName": { - "id": 122, + "id": 130, "name": "address", "nodeType": "ElementaryTypeName", - "src": "3166:7:1", + "src": "3286:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1705,11 +1898,11 @@ }, { "constant": false, - "id": 125, + "id": 133, "name": "_tokenAddress", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3194:21:1", + "scope": 180, + "src": "3314:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1717,10 +1910,10 @@ "typeString": "address" }, "typeName": { - "id": 124, + "id": 132, "name": "address", "nodeType": "ElementaryTypeName", - "src": "3194:7:1", + "src": "3314:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1732,11 +1925,11 @@ }, { "constant": false, - "id": 127, + "id": 135, "name": "_tokenAmount", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3225:20:1", + "scope": 180, + "src": "3345:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1744,10 +1937,10 @@ "typeString": "uint256" }, "typeName": { - "id": 126, + "id": 134, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3225:7:1", + "src": "3345:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1758,11 +1951,11 @@ }, { "constant": false, - "id": 129, + "id": 137, "name": "_periodSeconds", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3255:22:1", + "scope": 180, + "src": "3375:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1770,10 +1963,10 @@ "typeString": "uint256" }, "typeName": { - "id": 128, + "id": 136, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3255:7:1", + "src": "3375:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1784,11 +1977,11 @@ }, { "constant": false, - "id": 131, + "id": 139, "name": "_gasPrice", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3287:17:1", + "scope": 180, + "src": "3407:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1796,10 +1989,10 @@ "typeString": "uint256" }, "typeName": { - "id": 130, + "id": 138, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3287:7:1", + "src": "3407:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1810,11 +2003,11 @@ }, { "constant": false, - "id": 133, + "id": 141, "name": "_version", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3314:14:1", + "scope": 180, + "src": "3434:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1822,10 +2015,10 @@ "typeString": "uint8" }, "typeName": { - "id": 132, + "id": 140, "name": "uint8", "nodeType": "ElementaryTypeName", - "src": "3314:5:1", + "src": "3434:5:1", "typeDescriptions": { "typeIdentifier": "t_uint8", "typeString": "uint8" @@ -1836,11 +2029,11 @@ }, { "constant": false, - "id": 135, + "id": 143, "name": "_relayer", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3338:16:1", + "scope": 180, + "src": "3458:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -1848,10 +2041,10 @@ "typeString": "address" }, "typeName": { - "id": 134, + "id": 142, "name": "address", "nodeType": "ElementaryTypeName", - "src": "3338:7:1", + "src": "3458:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1862,25 +2055,324 @@ "visibility": "internal" } ], - "src": "3156:204:1" + "src": "3276:204:1" }, "returnParameters": { - "id": 137, + "id": 145, "nodeType": "ParameterList", "parameters": [], - "src": "3368:0:1" + "src": "3488:0:1" }, - "scope": 675, - "src": "3145:489:1", + "scope": 710, + "src": "3265:515:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 200, + "id": 202, "nodeType": "Block", - "src": "4037:227:1", + "src": "3855:114:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "id": 189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 186, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3871:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3871:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 188, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3883:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3871:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 185, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1389, + 1390 + ], + "referencedDeclaration": 1389, + "src": "3863:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3863:26:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 191, + "nodeType": "ExpressionStatement", + "src": "3863:26:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 192, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3897:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 193, + "name": "_newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 182, + "src": "3905:9:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3897:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 195, + "nodeType": "ExpressionStatement", + "src": "3897:17:1" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 197, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3944:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3944:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 199, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3956:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 196, + "name": "ownershipChanged", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 129, + "src": "3927:16:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3927:35:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 201, + "nodeType": "EmitStatement", + "src": "3922:40:1" + } + ] + }, + "documentation": null, + "id": 203, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "changeOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 183, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 182, + "name": "_newOwner", + "nodeType": "VariableDeclaration", + "scope": 203, + "src": "3811:25:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 181, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3811:15:1", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3810:27:1" + }, + "returnParameters": { + "id": 184, + "nodeType": "ParameterList", + "parameters": [], + "src": "3855:0:1" + }, + "scope": 710, + "src": "3786:183:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 235, + "nodeType": "Block", + "src": "4372:227:1", "statements": [ { "condition": { @@ -1889,7 +2381,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 184, + "id": 219, "isConstant": false, "isLValue": false, "isPure": false, @@ -1898,26 +2390,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 177, + "id": 212, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "4050:18:1", + "referencedDeclaration": 87, + "src": "4385:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 179, + "id": 214, "indexExpression": { "argumentTypes": null, - "id": 178, + "id": 213, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 170, - "src": "4069:16:1", + "referencedDeclaration": 205, + "src": "4404:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -1928,7 +2420,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4050:36:1", + "src": "4385:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -1941,7 +2433,7 @@ "arguments": [ { "argumentTypes": null, - "id": 182, + "id": 217, "isConstant": false, "isLValue": false, "isPure": true, @@ -1949,18 +2441,18 @@ "nodeType": "UnaryOperation", "operator": "-", "prefix": true, - "src": "4096:2:1", + "src": "4431:2:1", "subExpression": { "argumentTypes": null, "hexValue": "31", - "id": 181, + "id": 216, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4097:1:1", + "src": "4432:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -1981,20 +2473,20 @@ "typeString": "int_const -1" } ], - "id": 180, + "id": 215, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "4088:7:1", + "src": "4423:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint256" }, - "id": 183, + "id": 218, "isConstant": false, "isLValue": false, "isPure": true, @@ -2002,39 +2494,39 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4088:11:1", + "src": "4423:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "4050:49:1", + "src": "4385:49:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 188, + "id": 223, "nodeType": "IfStatement", - "src": "4047:88:1", + "src": "4382:88:1", "trueBody": { - "id": 187, + "id": 222, "nodeType": "Block", - "src": "4100:35:1", + "src": "4435:35:1", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", - "id": 185, + "id": 220, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "4119:5:1", + "src": "4454:5:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -2042,10 +2534,10 @@ }, "value": "false" }, - "functionReturnParameters": 176, - "id": 186, + "functionReturnParameters": 211, + "id": 221, "nodeType": "Return", - "src": "4112:12:1" + "src": "4447:12:1" } ] } @@ -2060,7 +2552,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 197, + "id": 232, "isConstant": false, "isLValue": false, "isPure": false, @@ -2069,18 +2561,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 189, + "id": 224, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1341, - "src": "4152:5:1", + "referencedDeclaration": 1376, + "src": "4487:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 190, + "id": 225, "isConstant": false, "isLValue": false, "isPure": false, @@ -2088,7 +2580,7 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "4152:15:1", + "src": "4487:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2101,12 +2593,12 @@ "arguments": [ { "argumentTypes": null, - "id": 195, + "id": 230, "name": "gracePeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 172, - "src": "4228:18:1", + "referencedDeclaration": 207, + "src": "4563:18:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2124,26 +2616,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 191, + "id": 226, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "4187:18:1", + "referencedDeclaration": 87, + "src": "4522:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 193, + "id": 228, "indexExpression": { "argumentTypes": null, - "id": 192, + "id": 227, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 170, - "src": "4206:16:1", + "referencedDeclaration": 205, + "src": "4541:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -2154,27 +2646,27 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4187:36:1", + "src": "4522:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 194, + "id": 229, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "4187:40:1", + "referencedDeclaration": 898, + "src": "4522:40:1", "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": 196, + "id": 231, "isConstant": false, "isLValue": false, "isPure": false, @@ -2182,57 +2674,57 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4187:60:1", + "src": "4522:60:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "4152:95:1", + "src": "4487:95:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], - "id": 198, + "id": 233, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "4151:106:1", + "src": "4486:106:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 176, - "id": 199, + "functionReturnParameters": 211, + "id": 234, "nodeType": "Return", - "src": "4144:113:1" + "src": "4479:113:1" } ] }, "documentation": null, - "id": 201, + "id": 236, "implemented": true, "kind": "function", "modifiers": [], "name": "isSubscriptionActive", "nodeType": "FunctionDefinition", "parameters": { - "id": 173, + "id": 208, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 170, + "id": 205, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 201, - "src": "3913:24:1", + "scope": 236, + "src": "4248:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2240,10 +2732,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 169, + "id": 204, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "3913:7:1", + "src": "4248:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -2254,11 +2746,11 @@ }, { "constant": false, - "id": 172, + "id": 207, "name": "gracePeriodSeconds", "nodeType": "VariableDeclaration", - "scope": 201, - "src": "3947:26:1", + "scope": 236, + "src": "4282:26:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2266,10 +2758,10 @@ "typeString": "uint256" }, "typeName": { - "id": 171, + "id": 206, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3947:7:1", + "src": "4282:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2279,19 +2771,19 @@ "visibility": "internal" } ], - "src": "3903:76:1" + "src": "4238:76:1" }, "returnParameters": { - "id": 176, + "id": 211, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 175, + "id": 210, "name": "", "nodeType": "VariableDeclaration", - "scope": 201, - "src": "4027:4:1", + "scope": 236, + "src": "4362:4:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -2299,10 +2791,10 @@ "typeString": "bool" }, "typeName": { - "id": 174, + "id": 209, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "4027:4:1", + "src": "4362:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2312,19 +2804,19 @@ "visibility": "internal" } ], - "src": "4026:6:1" + "src": "4361:6:1" }, - "scope": 675, - "src": "3874:390:1", + "scope": 710, + "src": "4209:390:1", "stateMutability": "view", "superFunction": null, "visibility": "external" }, { "body": { - "id": 300, + "id": 335, "nodeType": "Block", - "src": "4969:999:1", + "src": "5304:999:1", "statements": [ { "expression": { @@ -2336,7 +2828,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 229, + "id": 264, "isConstant": false, "isLValue": false, "isPure": false, @@ -2347,19 +2839,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 225, + "id": 260, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 221, + "id": 256, "name": "requiredToAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "5093:17:1", + "referencedDeclaration": 75, + "src": "5428:17:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -2373,14 +2865,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 223, + "id": 258, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5122:1:1", + "src": "5457:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -2396,20 +2888,20 @@ "typeString": "int_const 0" } ], - "id": 222, + "id": 257, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5114:7:1", + "src": "5449:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 224, + "id": 259, "isConstant": false, "isLValue": false, "isPure": true, @@ -2417,13 +2909,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5114:10:1", + "src": "5449:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "5093:31:1", + "src": "5428:31:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2437,19 +2929,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 228, + "id": 263, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 226, + "id": 261, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 205, - "src": "5128:2:1", + "referencedDeclaration": 240, + "src": "5463:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -2459,24 +2951,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 227, + "id": 262, "name": "requiredToAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "5134:17:1", + "referencedDeclaration": 75, + "src": "5469:17:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "5128:23:1", + "src": "5463:23:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5093:58:1", + "src": "5428:58:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2485,14 +2977,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564546f41646472657373204661696c757265", - "id": 230, + "id": 265, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5153:27:1", + "src": "5488:27:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430", @@ -2512,21 +3004,21 @@ "typeString": "literal_string \"requiredToAddress Failure\"" } ], - "id": 220, + "id": 255, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5084:7:1", + "referencedDeclaration": 1390, + "src": "5419:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 231, + "id": 266, "isConstant": false, "isLValue": false, "isPure": false, @@ -2534,15 +3026,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5084:98:1", + "src": "5419:98:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 232, + "id": 267, "nodeType": "ExpressionStatement", - "src": "5084:98:1" + "src": "5419:98:1" }, { "expression": { @@ -2554,7 +3046,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 242, + "id": 277, "isConstant": false, "isLValue": false, "isPure": false, @@ -2565,19 +3057,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 238, + "id": 273, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 234, + "id": 269, "name": "requiredTokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "5201:20:1", + "referencedDeclaration": 77, + "src": "5536:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -2591,14 +3083,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 236, + "id": 271, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5233:1:1", + "src": "5568:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -2614,20 +3106,20 @@ "typeString": "int_const 0" } ], - "id": 235, + "id": 270, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5225:7:1", + "src": "5560:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 237, + "id": 272, "isConstant": false, "isLValue": false, "isPure": true, @@ -2635,13 +3127,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5225:10:1", + "src": "5560:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "5201:34:1", + "src": "5536:34:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2655,19 +3147,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 241, + "id": 276, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 239, + "id": 274, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 207, - "src": "5239:12:1", + "referencedDeclaration": 242, + "src": "5574:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -2677,24 +3169,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 240, + "id": 275, "name": "requiredTokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "5255:20:1", + "referencedDeclaration": 77, + "src": "5590:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "5239:36:1", + "src": "5574:36:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5201:74:1", + "src": "5536:74:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2703,14 +3195,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564546f6b656e41646472657373204661696c757265", - "id": 243, + "id": 278, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5277:30:1", + "src": "5612:30:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c", @@ -2730,21 +3222,21 @@ "typeString": "literal_string \"requiredTokenAddress Failure\"" } ], - "id": 233, + "id": 268, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5192:7:1", + "referencedDeclaration": 1390, + "src": "5527:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 244, + "id": 279, "isConstant": false, "isLValue": false, "isPure": false, @@ -2752,15 +3244,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5192:118:1", + "src": "5527:118:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 245, + "id": 280, "nodeType": "ExpressionStatement", - "src": "5192:118:1" + "src": "5527:118:1" }, { "expression": { @@ -2772,7 +3264,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 253, + "id": 288, "isConstant": false, "isLValue": false, "isPure": false, @@ -2783,19 +3275,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 249, + "id": 284, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 247, + "id": 282, "name": "requiredTokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "5329:19:1", + "referencedDeclaration": 79, + "src": "5664:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2806,14 +3298,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 248, + "id": 283, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5352:1:1", + "src": "5687:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -2821,7 +3313,7 @@ }, "value": "0" }, - "src": "5329:24:1", + "src": "5664:24:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2835,19 +3327,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 252, + "id": 287, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 250, + "id": 285, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 209, - "src": "5357:11:1", + "referencedDeclaration": 244, + "src": "5692:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2857,24 +3349,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 251, + "id": 286, "name": "requiredTokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "5372:19:1", + "referencedDeclaration": 79, + "src": "5707:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "5357:34:1", + "src": "5692:34:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5329:62:1", + "src": "5664:62:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -2883,14 +3375,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564546f6b656e416d6f756e74204661696c757265", - "id": 254, + "id": 289, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5393:29:1", + "src": "5728:29:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785", @@ -2910,21 +3402,21 @@ "typeString": "literal_string \"requiredTokenAmount Failure\"" } ], - "id": 246, + "id": 281, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5320:7:1", + "referencedDeclaration": 1390, + "src": "5655:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 255, + "id": 290, "isConstant": false, "isLValue": false, "isPure": false, @@ -2932,15 +3424,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5320:105:1", + "src": "5655:105:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 256, + "id": 291, "nodeType": "ExpressionStatement", - "src": "5320:105:1" + "src": "5655:105:1" }, { "expression": { @@ -2952,7 +3444,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 264, + "id": 299, "isConstant": false, "isLValue": false, "isPure": false, @@ -2963,19 +3455,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 260, + "id": 295, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 258, + "id": 293, "name": "requiredPeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "5444:21:1", + "referencedDeclaration": 81, + "src": "5779:21:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -2986,14 +3478,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 259, + "id": 294, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5469:1:1", + "src": "5804:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -3001,7 +3493,7 @@ }, "value": "0" }, - "src": "5444:26:1", + "src": "5779:26:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -3015,19 +3507,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 263, + "id": 298, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 261, + "id": 296, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 211, - "src": "5474:13:1", + "referencedDeclaration": 246, + "src": "5809:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3037,24 +3529,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 262, + "id": 297, "name": "requiredPeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "5491:21:1", + "referencedDeclaration": 81, + "src": "5826:21:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "5474:38:1", + "src": "5809:38:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5444:68:1", + "src": "5779:68:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -3063,14 +3555,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564506572696f645365636f6e6473204661696c757265", - "id": 265, + "id": 300, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5514:31:1", + "src": "5849:31:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b", @@ -3090,21 +3582,21 @@ "typeString": "literal_string \"requiredPeriodSeconds Failure\"" } ], - "id": 257, + "id": 292, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5435:7:1", + "referencedDeclaration": 1390, + "src": "5770:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 266, + "id": 301, "isConstant": false, "isLValue": false, "isPure": false, @@ -3112,15 +3604,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5435:113:1", + "src": "5770:113:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 267, + "id": 302, "nodeType": "ExpressionStatement", - "src": "5435:113:1" + "src": "5770:113:1" }, { "expression": { @@ -3132,7 +3624,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 275, + "id": 310, "isConstant": false, "isLValue": false, "isPure": false, @@ -3143,19 +3635,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 271, + "id": 306, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 269, + "id": 304, "name": "requiredGasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "5567:16:1", + "referencedDeclaration": 83, + "src": "5902:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3166,14 +3658,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 270, + "id": 305, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5587:1:1", + "src": "5922:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -3181,7 +3673,7 @@ }, "value": "0" }, - "src": "5567:21:1", + "src": "5902:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -3195,19 +3687,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 274, + "id": 309, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 272, + "id": 307, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "5592:8:1", + "referencedDeclaration": 248, + "src": "5927:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3217,24 +3709,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 273, + "id": 308, "name": "requiredGasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "5604:16:1", + "referencedDeclaration": 83, + "src": "5939:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "5592:28:1", + "src": "5927:28:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5567:53:1", + "src": "5902:53:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -3243,14 +3735,14 @@ { "argumentTypes": null, "hexValue": "72657175697265644761735072696365204661696c757265", - "id": 276, + "id": 311, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5622:26:1", + "src": "5957:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb", @@ -3270,21 +3762,21 @@ "typeString": "literal_string \"requiredGasPrice Failure\"" } ], - "id": 268, + "id": 303, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5558:7:1", + "referencedDeclaration": 1390, + "src": "5893:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 277, + "id": 312, "isConstant": false, "isLValue": false, "isPure": false, @@ -3292,15 +3784,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5558:93:1", + "src": "5893:93:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 278, + "id": 313, "nodeType": "ExpressionStatement", - "src": "5558:93:1" + "src": "5893:93:1" }, { "expression": { @@ -3315,14 +3807,14 @@ { "argumentTypes": null, "hexValue": "30783139", - "id": 283, + "id": 318, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5731:4:1", + "src": "6066:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_25_by_1", @@ -3338,20 +3830,20 @@ "typeString": "int_const 25" } ], - "id": 282, + "id": 317, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5726:4:1", + "src": "6061:4:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, - "id": 284, + "id": 319, "isConstant": false, "isLValue": false, "isPure": true, @@ -3359,7 +3851,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5726:10:1", + "src": "6061:10:1", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" @@ -3371,14 +3863,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 286, + "id": 321, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5759:1:1", + "src": "6094:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -3394,20 +3886,20 @@ "typeString": "int_const 0" } ], - "id": 285, + "id": 320, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5754:4:1", + "src": "6089:4:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, - "id": 287, + "id": 322, "isConstant": false, "isLValue": false, "isPure": true, @@ -3415,7 +3907,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5754:7:1", + "src": "6089:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" @@ -3426,14 +3918,14 @@ "arguments": [ { "argumentTypes": null, - "id": 289, + "id": 324, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1374, - "src": "5787:4:1", + "referencedDeclaration": 1409, + "src": "6122:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } } @@ -3441,24 +3933,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } ], - "id": 288, + "id": 323, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5779:7:1", + "src": "6114:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 290, + "id": 325, "isConstant": false, "isLValue": false, "isPure": false, @@ -3466,7 +3958,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5779:13:1", + "src": "6114:13:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -3474,12 +3966,12 @@ }, { "argumentTypes": null, - "id": 291, + "id": 326, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 203, - "src": "5810:4:1", + "referencedDeclaration": 238, + "src": "6145:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -3487,12 +3979,12 @@ }, { "argumentTypes": null, - "id": 292, + "id": 327, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 205, - "src": "5832:2:1", + "referencedDeclaration": 240, + "src": "6167:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -3500,12 +3992,12 @@ }, { "argumentTypes": null, - "id": 293, + "id": 328, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 207, - "src": "5852:12:1", + "referencedDeclaration": 242, + "src": "6187:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -3513,12 +4005,12 @@ }, { "argumentTypes": null, - "id": 294, + "id": 329, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 209, - "src": "5882:11:1", + "referencedDeclaration": 244, + "src": "6217:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3526,12 +4018,12 @@ }, { "argumentTypes": null, - "id": 295, + "id": 330, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 211, - "src": "5911:13:1", + "referencedDeclaration": 246, + "src": "6246:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3539,12 +4031,12 @@ }, { "argumentTypes": null, - "id": 296, + "id": 331, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "5942:8:1", + "referencedDeclaration": 248, + "src": "6277:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3592,18 +4084,18 @@ ], "expression": { "argumentTypes": null, - "id": 280, + "id": 315, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1338, - "src": "5692:3:1", + "referencedDeclaration": 1373, + "src": "6027:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, - "id": 281, + "id": 316, "isConstant": false, "isLValue": false, "isPure": true, @@ -3611,13 +4103,13 @@ "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "5692:16:1", + "src": "6027:16:1", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, - "id": 297, + "id": 332, "isConstant": false, "isLValue": false, "isPure": false, @@ -3625,7 +4117,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5692:268:1", + "src": "6027:268:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -3639,18 +4131,18 @@ "typeString": "bytes memory" } ], - "id": 279, + "id": 314, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1345, - "src": "5669:9:1", + "referencedDeclaration": 1380, + "src": "6004:9:1", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, - "id": 298, + "id": 333, "isConstant": false, "isLValue": false, "isPure": false, @@ -3658,37 +4150,37 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5669:292:1", + "src": "6004:292:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "functionReturnParameters": 219, - "id": 299, + "functionReturnParameters": 254, + "id": 334, "nodeType": "Return", - "src": "5662:299:1" + "src": "5997:299:1" } ] }, "documentation": null, - "id": 301, + "id": 336, "implemented": true, "kind": "function", "modifiers": [], "name": "getSubscriptionHash", "nodeType": "FunctionDefinition", "parameters": { - "id": 216, + "id": 251, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 203, + "id": 238, "name": "from", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4458:12:1", + "scope": 336, + "src": "4793:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3696,10 +4188,10 @@ "typeString": "address" }, "typeName": { - "id": 202, + "id": 237, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4458:7:1", + "src": "4793:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -3711,11 +4203,11 @@ }, { "constant": false, - "id": 205, + "id": 240, "name": "to", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4497:10:1", + "scope": 336, + "src": "4832:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3723,10 +4215,10 @@ "typeString": "address" }, "typeName": { - "id": 204, + "id": 239, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4497:7:1", + "src": "4832:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -3738,11 +4230,11 @@ }, { "constant": false, - "id": 207, + "id": 242, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4533:20:1", + "scope": 336, + "src": "4868:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3750,10 +4242,10 @@ "typeString": "address" }, "typeName": { - "id": 206, + "id": 241, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4533:7:1", + "src": "4868:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -3765,11 +4257,11 @@ }, { "constant": false, - "id": 209, + "id": 244, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4605:19:1", + "scope": 336, + "src": "4940:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3777,10 +4269,10 @@ "typeString": "uint256" }, "typeName": { - "id": 208, + "id": 243, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4605:7:1", + "src": "4940:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3791,11 +4283,11 @@ }, { "constant": false, - "id": 211, + "id": 246, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4675:21:1", + "scope": 336, + "src": "5010:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3803,10 +4295,10 @@ "typeString": "uint256" }, "typeName": { - "id": 210, + "id": 245, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4675:7:1", + "src": "5010:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3817,11 +4309,11 @@ }, { "constant": false, - "id": 213, + "id": 248, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4747:16:1", + "scope": 336, + "src": "5082:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3829,10 +4321,10 @@ "typeString": "uint256" }, "typeName": { - "id": 212, + "id": 247, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4747:7:1", + "src": "5082:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3843,11 +4335,11 @@ }, { "constant": false, - "id": 215, + "id": 250, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4831:13:1", + "scope": 336, + "src": "5166:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3855,10 +4347,10 @@ "typeString": "uint256" }, "typeName": { - "id": 214, + "id": 249, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4831:7:1", + "src": "5166:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -3868,19 +4360,19 @@ "visibility": "internal" } ], - "src": "4448:462:1" + "src": "4783:462:1" }, "returnParameters": { - "id": 219, + "id": 254, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 218, + "id": 253, "name": "", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4956:7:1", + "scope": 336, + "src": "5291:7:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -3888,10 +4380,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 217, + "id": 252, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "4956:7:1", + "src": "5291:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -3901,19 +4393,19 @@ "visibility": "internal" } ], - "src": "4955:9:1" + "src": "5290:9:1" }, - "scope": 675, - "src": "4420:1548:1", + "scope": 710, + "src": "4755:1548:1", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 317, + "id": 352, "nodeType": "Block", - "src": "6263:84:1", + "src": "6598:84:1", "statements": [ { "expression": { @@ -3921,12 +4413,12 @@ "arguments": [ { "argumentTypes": null, - "id": 314, + "id": 349, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 305, - "src": "6330:9:1", + "referencedDeclaration": 340, + "src": "6665:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -3947,32 +4439,32 @@ "argumentTypes": [], "expression": { "argumentTypes": null, - "id": 310, + "id": 345, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 303, - "src": "6280:16:1", + "referencedDeclaration": 338, + "src": "6615:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 311, + "id": 346, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "toEthSignedMessageHash", "nodeType": "MemberAccess", - "referencedDeclaration": 755, - "src": "6280:39:1", + "referencedDeclaration": 790, + "src": "6615:39:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$", "typeString": "function (bytes32) pure returns (bytes32)" } }, - "id": 312, + "id": 347, "isConstant": false, "isLValue": false, "isPure": false, @@ -3980,27 +4472,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6280:41:1", + "src": "6615:41:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 313, + "id": 348, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "recover", "nodeType": "MemberAccess", - "referencedDeclaration": 739, - "src": "6280:49:1", + "referencedDeclaration": 774, + "src": "6615:49:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$", "typeString": "function (bytes32,bytes memory) pure returns (address)" } }, - "id": 315, + "id": 350, "isConstant": false, "isLValue": false, "isPure": false, @@ -4008,37 +4500,37 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6280:60:1", + "src": "6615:60:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "functionReturnParameters": 309, - "id": 316, + "functionReturnParameters": 344, + "id": 351, "nodeType": "Return", - "src": "6273:67:1" + "src": "6608:67:1" } ] }, "documentation": null, - "id": 318, + "id": 353, "implemented": true, "kind": "function", "modifiers": [], "name": "getSubscriptionSigner", "nodeType": "FunctionDefinition", "parameters": { - "id": 306, + "id": 341, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 303, + "id": 338, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 318, - "src": "6069:24:1", + "scope": 353, + "src": "6404:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4046,10 +4538,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 302, + "id": 337, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "6069:7:1", + "src": "6404:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -4060,11 +4552,11 @@ }, { "constant": false, - "id": 305, + "id": 340, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 318, - "src": "6126:22:1", + "scope": 353, + "src": "6461:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -4072,10 +4564,10 @@ "typeString": "bytes" }, "typeName": { - "id": 304, + "id": 339, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "6126:5:1", + "src": "6461:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -4085,19 +4577,19 @@ "visibility": "internal" } ], - "src": "6059:145:1" + "src": "6394:145:1" }, "returnParameters": { - "id": 309, + "id": 344, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 308, + "id": 343, "name": "", "nodeType": "VariableDeclaration", - "scope": 318, - "src": "6250:7:1", + "scope": 353, + "src": "6585:7:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4105,10 +4597,10 @@ "typeString": "address" }, "typeName": { - "id": 307, + "id": 342, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6250:7:1", + "src": "6585:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -4119,32 +4611,32 @@ "visibility": "internal" } ], - "src": "6249:9:1" + "src": "6584:9:1" }, - "scope": 675, - "src": "6029:318:1", + "scope": 710, + "src": "6364:318:1", "stateMutability": "pure", "superFunction": null, "visibility": "public" }, { "body": { - "id": 409, + "id": 444, "nodeType": "Block", - "src": "7098:633:1", + "src": "7433:633:1", "statements": [ { "assignments": [ - 340 + 375 ], "declarations": [ { "constant": false, - "id": 340, + "id": 375, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7108:24:1", + "scope": 444, + "src": "7443:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4152,10 +4644,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 339, + "id": 374, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "7108:7:1", + "src": "7443:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -4165,18 +4657,18 @@ "visibility": "internal" } ], - "id": 350, + "id": 385, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 342, + "id": 377, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7168:4:1", + "referencedDeclaration": 355, + "src": "7503:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4184,12 +4676,12 @@ }, { "argumentTypes": null, - "id": 343, + "id": 378, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 322, - "src": "7174:2:1", + "referencedDeclaration": 357, + "src": "7509:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4197,12 +4689,12 @@ }, { "argumentTypes": null, - "id": 344, + "id": 379, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "7178:12:1", + "referencedDeclaration": 359, + "src": "7513:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4210,12 +4702,12 @@ }, { "argumentTypes": null, - "id": 345, + "id": 380, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 326, - "src": "7192:11:1", + "referencedDeclaration": 361, + "src": "7527:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4223,12 +4715,12 @@ }, { "argumentTypes": null, - "id": 346, + "id": 381, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 328, - "src": "7205:13:1", + "referencedDeclaration": 363, + "src": "7540:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4236,12 +4728,12 @@ }, { "argumentTypes": null, - "id": 347, + "id": 382, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "7220:8:1", + "referencedDeclaration": 365, + "src": "7555:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4249,12 +4741,12 @@ }, { "argumentTypes": null, - "id": 348, + "id": 383, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "7230:5:1", + "referencedDeclaration": 367, + "src": "7565:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4292,18 +4784,18 @@ "typeString": "uint256" } ], - "id": 341, + "id": 376, "name": "getSubscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 301, - "src": "7135:19:1", + "referencedDeclaration": 336, + "src": "7470:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" } }, - "id": 349, + "id": 384, "isConstant": false, "isLValue": false, "isPure": false, @@ -4311,27 +4803,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7135:110:1", + "src": "7470:110:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", - "src": "7108:137:1" + "src": "7443:137:1" }, { "assignments": [ - 352 + 387 ], "declarations": [ { "constant": false, - "id": 352, + "id": 387, "name": "signer", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7255:14:1", + "scope": 444, + "src": "7590:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4339,10 +4831,10 @@ "typeString": "address" }, "typeName": { - "id": 351, + "id": 386, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7255:7:1", + "src": "7590:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -4353,18 +4845,18 @@ "visibility": "internal" } ], - "id": 357, + "id": 392, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 354, + "id": 389, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 340, - "src": "7294:16:1", + "referencedDeclaration": 375, + "src": "7629:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -4372,12 +4864,12 @@ }, { "argumentTypes": null, - "id": 355, + "id": 390, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 334, - "src": "7312:9:1", + "referencedDeclaration": 369, + "src": "7647:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -4395,18 +4887,18 @@ "typeString": "bytes memory" } ], - "id": 353, + "id": 388, "name": "getSubscriptionSigner", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "7272:21:1", + "referencedDeclaration": 353, + "src": "7607:21:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", "typeString": "function (bytes32,bytes memory) pure returns (address)" } }, - "id": 356, + "id": 391, "isConstant": false, "isLValue": false, "isPure": false, @@ -4414,27 +4906,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7272:50:1", + "src": "7607:50:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "7255:67:1" + "src": "7590:67:1" }, { "assignments": [ - 359 + 394 ], "declarations": [ { "constant": false, - "id": 359, + "id": 394, "name": "allowance", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7332:17:1", + "scope": 444, + "src": "7667:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4442,10 +4934,10 @@ "typeString": "uint256" }, "typeName": { - "id": 358, + "id": 393, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7332:7:1", + "src": "7667:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4455,18 +4947,18 @@ "visibility": "internal" } ], - "id": 369, + "id": 404, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 364, + "id": 399, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7382:4:1", + "referencedDeclaration": 355, + "src": "7717:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4477,14 +4969,14 @@ "arguments": [ { "argumentTypes": null, - "id": 366, + "id": 401, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1374, - "src": "7396:4:1", + "referencedDeclaration": 1409, + "src": "7731:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } } @@ -4492,24 +4984,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } ], - "id": 365, + "id": 400, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "7388:7:1", + "src": "7723:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 367, + "id": 402, "isConstant": false, "isLValue": false, "isPure": false, @@ -4517,7 +5009,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7388:13:1", + "src": "7723:13:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -4540,12 +5032,12 @@ "arguments": [ { "argumentTypes": null, - "id": 361, + "id": 396, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "7358:12:1", + "referencedDeclaration": 359, + "src": "7693:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4559,18 +5051,18 @@ "typeString": "address" } ], - "id": 360, + "id": 395, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "7352:5:1", + "referencedDeclaration": 1302, + "src": "7687:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 362, + "id": 397, "isConstant": false, "isLValue": false, "isPure": false, @@ -4578,27 +5070,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7352:19:1", + "src": "7687:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 363, + "id": 398, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "allowance", "nodeType": "MemberAccess", - "referencedDeclaration": 941, - "src": "7352:29:1", + "referencedDeclaration": 976, + "src": "7687:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", "typeString": "function (address,address) view external returns (uint256)" } }, - "id": 368, + "id": 403, "isConstant": false, "isLValue": false, "isPure": false, @@ -4606,27 +5098,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7352:50:1", + "src": "7687:50:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "7332:70:1" + "src": "7667:70:1" }, { "assignments": [ - 371 + 406 ], "declarations": [ { "constant": false, - "id": 371, + "id": 406, "name": "balance", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7412:15:1", + "scope": 444, + "src": "7747:15:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -4634,10 +5126,10 @@ "typeString": "uint256" }, "typeName": { - "id": 370, + "id": 405, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7412:7:1", + "src": "7747:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4647,18 +5139,18 @@ "visibility": "internal" } ], - "id": 378, + "id": 413, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 376, + "id": 411, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7460:4:1", + "referencedDeclaration": 355, + "src": "7795:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4677,12 +5169,12 @@ "arguments": [ { "argumentTypes": null, - "id": 373, + "id": 408, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "7436:12:1", + "referencedDeclaration": 359, + "src": "7771:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4696,18 +5188,18 @@ "typeString": "address" } ], - "id": 372, + "id": 407, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "7430:5:1", + "referencedDeclaration": 1302, + "src": "7765:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 374, + "id": 409, "isConstant": false, "isLValue": false, "isPure": false, @@ -4715,27 +5207,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7430:19:1", + "src": "7765:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 375, + "id": 410, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 925, - "src": "7430:29:1", + "referencedDeclaration": 960, + "src": "7765:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 377, + "id": 412, "isConstant": false, "isLValue": false, "isPure": false, @@ -4743,14 +5235,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7430:35:1", + "src": "7765:35:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "7412:53:1" + "src": "7747:53:1" }, { "expression": { @@ -4762,7 +5254,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 406, + "id": 441, "isConstant": false, "isLValue": false, "isPure": false, @@ -4773,7 +5265,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 399, + "id": 434, "isConstant": false, "isLValue": false, "isPure": false, @@ -4784,7 +5276,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 392, + "id": 427, "isConstant": false, "isLValue": false, "isPure": false, @@ -4795,7 +5287,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 385, + "id": 420, "isConstant": false, "isLValue": false, "isPure": false, @@ -4806,19 +5298,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 381, + "id": 416, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 379, + "id": 414, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 352, - "src": "7497:6:1", + "referencedDeclaration": 387, + "src": "7832:6:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4828,18 +5320,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 380, + "id": 415, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7507:4:1", + "referencedDeclaration": 355, + "src": "7842:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "7497:14:1", + "src": "7832:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -4853,19 +5345,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 384, + "id": 419, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 382, + "id": 417, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7527:4:1", + "referencedDeclaration": 355, + "src": "7862:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -4875,24 +5367,24 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 383, + "id": 418, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 322, - "src": "7535:2:1", + "referencedDeclaration": 357, + "src": "7870:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "7527:10:1", + "src": "7862:10:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:40:1", + "src": "7832:40:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -4906,7 +5398,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 391, + "id": 426, "isConstant": false, "isLValue": false, "isPure": false, @@ -4915,18 +5407,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 386, + "id": 421, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1341, - "src": "7553:5:1", + "referencedDeclaration": 1376, + "src": "7888:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 387, + "id": 422, "isConstant": false, "isLValue": false, "isPure": false, @@ -4934,7 +5426,7 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "7553:15:1", + "src": "7888:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -4946,26 +5438,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 388, + "id": 423, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7572:18:1", + "referencedDeclaration": 87, + "src": "7907:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 390, + "id": 425, "indexExpression": { "argumentTypes": null, - "id": 389, + "id": 424, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 340, - "src": "7591:16:1", + "referencedDeclaration": 375, + "src": "7926:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -4976,19 +5468,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7572:36:1", + "src": "7907:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7553:55:1", + "src": "7888:55:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:111:1", + "src": "7832:111:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5002,19 +5494,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 398, + "id": 433, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 393, + "id": 428, "name": "allowance", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 359, - "src": "7624:9:1", + "referencedDeclaration": 394, + "src": "7959:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5027,12 +5519,12 @@ "arguments": [ { "argumentTypes": null, - "id": 396, + "id": 431, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "7653:8:1", + "referencedDeclaration": 365, + "src": "7988:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5048,32 +5540,32 @@ ], "expression": { "argumentTypes": null, - "id": 394, + "id": 429, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 326, - "src": "7637:11:1", + "referencedDeclaration": 361, + "src": "7972:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 395, + "id": 430, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "7637:15:1", + "referencedDeclaration": 898, + "src": "7972:15:1", "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": 397, + "id": 432, "isConstant": false, "isLValue": false, "isPure": false, @@ -5081,19 +5573,19 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7637:25:1", + "src": "7972:25:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7624:38:1", + "src": "7959:38:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:165:1", + "src": "7832:165:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5107,19 +5599,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 405, + "id": 440, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 400, + "id": 435, "name": "balance", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 371, - "src": "7678:7:1", + "referencedDeclaration": 406, + "src": "8013:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5132,12 +5624,12 @@ "arguments": [ { "argumentTypes": null, - "id": 403, + "id": 438, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "7705:8:1", + "referencedDeclaration": 365, + "src": "8040:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5153,32 +5645,32 @@ ], "expression": { "argumentTypes": null, - "id": 401, + "id": 436, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 326, - "src": "7689:11:1", + "referencedDeclaration": 361, + "src": "8024:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 402, + "id": 437, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "7689:15:1", + "referencedDeclaration": 898, + "src": "8024:15:1", "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": 404, + "id": 439, "isConstant": false, "isLValue": false, "isPure": false, @@ -5186,63 +5678,63 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7689:25:1", + "src": "8024:25:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7678:36:1", + "src": "8013:36:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:217:1", + "src": "7832:217:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], - "id": 407, + "id": 442, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "7483:241:1", + "src": "7818:241:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 338, - "id": 408, + "functionReturnParameters": 373, + "id": 443, "nodeType": "Return", - "src": "7476:248:1" + "src": "7811:248:1" } ] }, "documentation": null, - "id": 410, + "id": 445, "implemented": true, "kind": "function", "modifiers": [], "name": "isSubscriptionReady", "nodeType": "FunctionDefinition", "parameters": { - "id": 335, + "id": 370, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 320, + "id": 355, "name": "from", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6508:12:1", + "scope": 445, + "src": "6843:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5250,10 +5742,10 @@ "typeString": "address" }, "typeName": { - "id": 319, + "id": 354, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6508:7:1", + "src": "6843:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -5265,11 +5757,11 @@ }, { "constant": false, - "id": 322, + "id": 357, "name": "to", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6547:10:1", + "scope": 445, + "src": "6882:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5277,10 +5769,10 @@ "typeString": "address" }, "typeName": { - "id": 321, + "id": 356, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6547:7:1", + "src": "6882:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -5292,11 +5784,11 @@ }, { "constant": false, - "id": 324, + "id": 359, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6583:20:1", + "scope": 445, + "src": "6918:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5304,10 +5796,10 @@ "typeString": "address" }, "typeName": { - "id": 323, + "id": 358, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6583:7:1", + "src": "6918:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -5319,11 +5811,11 @@ }, { "constant": false, - "id": 326, + "id": 361, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6655:19:1", + "scope": 445, + "src": "6990:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5331,10 +5823,10 @@ "typeString": "uint256" }, "typeName": { - "id": 325, + "id": 360, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6655:7:1", + "src": "6990:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5345,11 +5837,11 @@ }, { "constant": false, - "id": 328, + "id": 363, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6725:21:1", + "scope": 445, + "src": "7060:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5357,10 +5849,10 @@ "typeString": "uint256" }, "typeName": { - "id": 327, + "id": 362, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6725:7:1", + "src": "7060:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5371,11 +5863,11 @@ }, { "constant": false, - "id": 330, + "id": 365, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6797:16:1", + "scope": 445, + "src": "7132:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5383,10 +5875,10 @@ "typeString": "uint256" }, "typeName": { - "id": 329, + "id": 364, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6797:7:1", + "src": "7132:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5397,11 +5889,11 @@ }, { "constant": false, - "id": 332, + "id": 367, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6882:13:1", + "scope": 445, + "src": "7217:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5409,10 +5901,10 @@ "typeString": "uint256" }, "typeName": { - "id": 331, + "id": 366, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6882:7:1", + "src": "7217:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5423,11 +5915,11 @@ }, { "constant": false, - "id": 334, + "id": 369, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6964:22:1", + "scope": 445, + "src": "7299:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -5435,10 +5927,10 @@ "typeString": "bytes" }, "typeName": { - "id": 333, + "id": 368, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "6964:5:1", + "src": "7299:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -5448,19 +5940,19 @@ "visibility": "internal" } ], - "src": "6498:544:1" + "src": "6833:544:1" }, "returnParameters": { - "id": 338, + "id": 373, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 337, + "id": 372, "name": "", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "7088:4:1", + "scope": 445, + "src": "7423:4:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5468,10 +5960,10 @@ "typeString": "bool" }, "typeName": { - "id": 336, + "id": 371, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7088:4:1", + "src": "7423:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5481,32 +5973,32 @@ "visibility": "internal" } ], - "src": "7087:6:1" + "src": "7422:6:1" }, - "scope": 675, - "src": "6470:1261:1", + "scope": 710, + "src": "6805:1261:1", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 486, + "id": 521, "nodeType": "Block", - "src": "8606:802:1", + "src": "8941:802:1", "statements": [ { "assignments": [ - 432 + 467 ], "declarations": [ { "constant": false, - "id": 432, + "id": 467, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 486, - "src": "8616:24:1", + "scope": 521, + "src": "8951:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5514,10 +6006,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 431, + "id": 466, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8616:7:1", + "src": "8951:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -5527,18 +6019,18 @@ "visibility": "internal" } ], - "id": 442, + "id": 477, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 434, + "id": 469, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "8676:4:1", + "referencedDeclaration": 447, + "src": "9011:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -5546,12 +6038,12 @@ }, { "argumentTypes": null, - "id": 435, + "id": 470, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 414, - "src": "8682:2:1", + "referencedDeclaration": 449, + "src": "9017:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -5559,12 +6051,12 @@ }, { "argumentTypes": null, - "id": 436, + "id": 471, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 416, - "src": "8686:12:1", + "referencedDeclaration": 451, + "src": "9021:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -5572,12 +6064,12 @@ }, { "argumentTypes": null, - "id": 437, + "id": 472, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 418, - "src": "8700:11:1", + "referencedDeclaration": 453, + "src": "9035:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5585,12 +6077,12 @@ }, { "argumentTypes": null, - "id": 438, + "id": 473, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 420, - "src": "8713:13:1", + "referencedDeclaration": 455, + "src": "9048:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5598,12 +6090,12 @@ }, { "argumentTypes": null, - "id": 439, + "id": 474, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 422, - "src": "8728:8:1", + "referencedDeclaration": 457, + "src": "9063:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5611,12 +6103,12 @@ }, { "argumentTypes": null, - "id": 440, + "id": 475, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 424, - "src": "8738:5:1", + "referencedDeclaration": 459, + "src": "9073:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -5654,18 +6146,18 @@ "typeString": "uint256" } ], - "id": 433, + "id": 468, "name": "getSubscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 301, - "src": "8643:19:1", + "referencedDeclaration": 336, + "src": "8978:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" } }, - "id": 441, + "id": 476, "isConstant": false, "isLValue": false, "isPure": false, @@ -5673,27 +6165,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8643:110:1", + "src": "8978:110:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", - "src": "8616:137:1" + "src": "8951:137:1" }, { "assignments": [ - 444 + 479 ], "declarations": [ { "constant": false, - "id": 444, + "id": 479, "name": "signer", "nodeType": "VariableDeclaration", - "scope": 486, - "src": "8763:14:1", + "scope": 521, + "src": "9098:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -5701,10 +6193,10 @@ "typeString": "address" }, "typeName": { - "id": 443, + "id": 478, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8763:7:1", + "src": "9098:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -5715,18 +6207,18 @@ "visibility": "internal" } ], - "id": 449, + "id": 484, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 446, + "id": 481, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 432, - "src": "8802:16:1", + "referencedDeclaration": 467, + "src": "9137:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -5734,12 +6226,12 @@ }, { "argumentTypes": null, - "id": 447, + "id": 482, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 426, - "src": "8820:9:1", + "referencedDeclaration": 461, + "src": "9155:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -5757,18 +6249,18 @@ "typeString": "bytes memory" } ], - "id": 445, + "id": 480, "name": "getSubscriptionSigner", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "8780:21:1", + "referencedDeclaration": 353, + "src": "9115:21:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", "typeString": "function (bytes32,bytes memory) pure returns (address)" } }, - "id": 448, + "id": 483, "isConstant": false, "isLValue": false, "isPure": false, @@ -5776,14 +6268,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8780:50:1", + "src": "9115:50:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "8763:67:1" + "src": "9098:67:1" }, { "expression": { @@ -5795,19 +6287,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 453, + "id": 488, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 451, + "id": 486, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 444, - "src": "8887:6:1", + "referencedDeclaration": 479, + "src": "9222:6:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -5817,18 +6309,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 452, + "id": 487, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "8897:4:1", + "referencedDeclaration": 447, + "src": "9232:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "8887:14:1", + "src": "9222:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5837,14 +6329,14 @@ { "argumentTypes": null, "hexValue": "496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e", - "id": 454, + "id": 489, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8903:49:1", + "src": "9238:49:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b", @@ -5864,21 +6356,21 @@ "typeString": "literal_string \"Invalid Signature for subscription cancellation\"" } ], - "id": 450, + "id": 485, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "8879:7:1", + "referencedDeclaration": 1390, + "src": "9214:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 455, + "id": 490, "isConstant": false, "isLValue": false, "isPure": false, @@ -5886,15 +6378,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8879:74:1", + "src": "9214:74:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 456, + "id": 491, "nodeType": "ExpressionStatement", - "src": "8879:74:1" + "src": "9214:74:1" }, { "expression": { @@ -5906,19 +6398,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 461, + "id": 496, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 458, + "id": 493, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "9012:4:1", + "referencedDeclaration": 447, + "src": "9347:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -5930,18 +6422,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 459, + "id": 494, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "9020:3:1", + "referencedDeclaration": 1386, + "src": "9355:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 460, + "id": 495, "isConstant": false, "isLValue": false, "isPure": false, @@ -5949,13 +6441,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9020:10:1", + "src": "9355:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "9012:18:1", + "src": "9347:18:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -5964,14 +6456,14 @@ { "argumentTypes": null, "hexValue": "6d73672e73656e646572206973206e6f74207468652073756273637269626572", - "id": 462, + "id": 497, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9032:34:1", + "src": "9367:34:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79", @@ -5991,21 +6483,21 @@ "typeString": "literal_string \"msg.sender is not the subscriber\"" } ], - "id": 457, + "id": 492, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "9004:7:1", + "referencedDeclaration": 1390, + "src": "9339:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 463, + "id": 498, "isConstant": false, "isLValue": false, "isPure": false, @@ -6013,20 +6505,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9004:63:1", + "src": "9339:63:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 464, + "id": 499, "nodeType": "ExpressionStatement", - "src": "9004:63:1" + "src": "9339:63:1" }, { "expression": { "argumentTypes": null, - "id": 472, + "id": 507, "isConstant": false, "isLValue": false, "isPure": false, @@ -6035,26 +6527,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 465, + "id": 500, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9206:18:1", + "referencedDeclaration": 87, + "src": "9541:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 467, + "id": 502, "indexExpression": { "argumentTypes": null, - "id": 466, + "id": 501, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 432, - "src": "9225:16:1", + "referencedDeclaration": 467, + "src": "9560:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -6065,7 +6557,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "9206:36:1", + "src": "9541:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6078,7 +6570,7 @@ "arguments": [ { "argumentTypes": null, - "id": 470, + "id": 505, "isConstant": false, "isLValue": false, "isPure": true, @@ -6086,18 +6578,18 @@ "nodeType": "UnaryOperation", "operator": "-", "prefix": true, - "src": "9251:2:1", + "src": "9586:2:1", "subExpression": { "argumentTypes": null, "hexValue": "31", - "id": 469, + "id": 504, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9252:1:1", + "src": "9587:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -6118,20 +6610,20 @@ "typeString": "int_const -1" } ], - "id": 468, + "id": 503, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9243:7:1", + "src": "9578:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint256" }, - "id": 471, + "id": 506, "isConstant": false, "isLValue": false, "isPure": true, @@ -6139,21 +6631,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9243:11:1", + "src": "9578:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9206:48:1", + "src": "9541:48:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 473, + "id": 508, "nodeType": "ExpressionStatement", - "src": "9206:48:1" + "src": "9541:48:1" }, { "eventCall": { @@ -6161,12 +6653,12 @@ "arguments": [ { "argumentTypes": null, - "id": 475, + "id": 510, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "9302:4:1", + "referencedDeclaration": 447, + "src": "9637:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6174,12 +6666,12 @@ }, { "argumentTypes": null, - "id": 476, + "id": 511, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 414, - "src": "9308:2:1", + "referencedDeclaration": 449, + "src": "9643:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6187,12 +6679,12 @@ }, { "argumentTypes": null, - "id": 477, + "id": 512, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 416, - "src": "9312:12:1", + "referencedDeclaration": 451, + "src": "9647:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6200,12 +6692,12 @@ }, { "argumentTypes": null, - "id": 478, + "id": 513, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 418, - "src": "9326:11:1", + "referencedDeclaration": 453, + "src": "9661:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6213,12 +6705,12 @@ }, { "argumentTypes": null, - "id": 479, + "id": 514, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 420, - "src": "9339:13:1", + "referencedDeclaration": 455, + "src": "9674:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6226,12 +6718,12 @@ }, { "argumentTypes": null, - "id": 480, + "id": 515, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 422, - "src": "9354:8:1", + "referencedDeclaration": 457, + "src": "9689:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6239,12 +6731,12 @@ }, { "argumentTypes": null, - "id": 481, + "id": 516, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 424, - "src": "9364:5:1", + "referencedDeclaration": 459, + "src": "9699:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6282,18 +6774,18 @@ "typeString": "uint256" } ], - "id": 474, + "id": 509, "name": "CancelSubscription", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 121, - "src": "9270:18:1", + "referencedDeclaration": 123, + "src": "9605:18:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" } }, - "id": 482, + "id": 517, "isConstant": false, "isLValue": false, "isPure": false, @@ -6301,28 +6793,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9270:109:1", + "src": "9605:109:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 483, + "id": 518, "nodeType": "EmitStatement", - "src": "9265:114:1" + "src": "9600:114:1" }, { "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 484, + "id": 519, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "9397:4:1", + "src": "9732:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -6330,31 +6822,31 @@ }, "value": "true" }, - "functionReturnParameters": 430, - "id": 485, + "functionReturnParameters": 465, + "id": 520, "nodeType": "Return", - "src": "9390:11:1" + "src": "9725:11:1" } ] }, "documentation": null, - "id": 487, + "id": 522, "implemented": true, "kind": "function", "modifiers": [], "name": "cancelSubscription", "nodeType": "FunctionDefinition", "parameters": { - "id": 427, + "id": 462, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 412, + "id": 447, "name": "from", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8022:12:1", + "scope": 522, + "src": "8357:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6362,10 +6854,10 @@ "typeString": "address" }, "typeName": { - "id": 411, + "id": 446, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8022:7:1", + "src": "8357:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -6377,11 +6869,11 @@ }, { "constant": false, - "id": 414, + "id": 449, "name": "to", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8061:10:1", + "scope": 522, + "src": "8396:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6389,10 +6881,10 @@ "typeString": "address" }, "typeName": { - "id": 413, + "id": 448, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8061:7:1", + "src": "8396:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -6404,11 +6896,11 @@ }, { "constant": false, - "id": 416, + "id": 451, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8097:20:1", + "scope": 522, + "src": "8432:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6416,10 +6908,10 @@ "typeString": "address" }, "typeName": { - "id": 415, + "id": 450, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8097:7:1", + "src": "8432:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -6431,11 +6923,11 @@ }, { "constant": false, - "id": 418, + "id": 453, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8169:19:1", + "scope": 522, + "src": "8504:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6443,10 +6935,10 @@ "typeString": "uint256" }, "typeName": { - "id": 417, + "id": 452, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8169:7:1", + "src": "8504:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6457,11 +6949,11 @@ }, { "constant": false, - "id": 420, + "id": 455, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8239:21:1", + "scope": 522, + "src": "8574:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6469,10 +6961,10 @@ "typeString": "uint256" }, "typeName": { - "id": 419, + "id": 454, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8239:7:1", + "src": "8574:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6483,11 +6975,11 @@ }, { "constant": false, - "id": 422, + "id": 457, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8311:16:1", + "scope": 522, + "src": "8646:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6495,10 +6987,10 @@ "typeString": "uint256" }, "typeName": { - "id": 421, + "id": 456, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8311:7:1", + "src": "8646:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6509,11 +7001,11 @@ }, { "constant": false, - "id": 424, + "id": 459, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8395:13:1", + "scope": 522, + "src": "8730:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6521,10 +7013,10 @@ "typeString": "uint256" }, "typeName": { - "id": 423, + "id": 458, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8395:7:1", + "src": "8730:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6535,11 +7027,11 @@ }, { "constant": false, - "id": 426, + "id": 461, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8477:22:1", + "scope": 522, + "src": "8812:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -6547,10 +7039,10 @@ "typeString": "bytes" }, "typeName": { - "id": 425, + "id": 460, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "8477:5:1", + "src": "8812:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -6560,19 +7052,19 @@ "visibility": "internal" } ], - "src": "8012:543:1" + "src": "8347:543:1" }, "returnParameters": { - "id": 430, + "id": 465, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 429, + "id": 464, "name": "success", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8588:12:1", + "scope": 522, + "src": "8923:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6580,10 +7072,10 @@ "typeString": "bool" }, "typeName": { - "id": 428, + "id": 463, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8588:4:1", + "src": "8923:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -6593,19 +7085,19 @@ "visibility": "internal" } ], - "src": "8587:14:1" + "src": "8922:14:1" }, - "scope": 675, - "src": "7985:1423:1", + "scope": 710, + "src": "8320:1423:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 636, + "id": 671, "nodeType": "Block", - "src": "10189:2468:1", + "src": "10524:2468:1", "statements": [ { "expression": { @@ -6617,7 +7109,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 512, + "id": 547, "isConstant": false, "isLValue": false, "isPure": false, @@ -6626,18 +7118,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 509, + "id": 544, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "10207:3:1", + "referencedDeclaration": 1386, + "src": "10542:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 510, + "id": 545, "isConstant": false, "isLValue": false, "isPure": false, @@ -6645,7 +7137,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10207:10:1", + "src": "10542:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -6655,18 +7147,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 511, + "id": 546, "name": "relayer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "10221:7:1", + "referencedDeclaration": 73, + "src": "10556:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "10207:21:1", + "src": "10542:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -6680,21 +7172,21 @@ "typeString": "bool" } ], - "id": 508, + "id": 543, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1354, - "src": "10199:7:1", + "referencedDeclaration": 1389, + "src": "10534:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, - "id": 513, + "id": 548, "isConstant": false, "isLValue": false, "isPure": false, @@ -6702,28 +7194,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10199:30:1", + "src": "10534:30:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 514, + "id": 549, "nodeType": "ExpressionStatement", - "src": "10199:30:1" + "src": "10534:30:1" }, { "assignments": [ - 516 + 551 ], "declarations": [ { "constant": false, - "id": 516, + "id": 551, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 636, - "src": "10239:24:1", + "scope": 671, + "src": "10574:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -6731,10 +7223,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 515, + "id": 550, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "10239:7:1", + "src": "10574:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -6744,18 +7236,18 @@ "visibility": "internal" } ], - "id": 526, + "id": 561, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 518, + "id": 553, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10299:4:1", + "referencedDeclaration": 524, + "src": "10634:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6763,12 +7255,12 @@ }, { "argumentTypes": null, - "id": 519, + "id": 554, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "10305:2:1", + "referencedDeclaration": 526, + "src": "10640:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6776,12 +7268,12 @@ }, { "argumentTypes": null, - "id": 520, + "id": 555, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "10309:12:1", + "referencedDeclaration": 528, + "src": "10644:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6789,12 +7281,12 @@ }, { "argumentTypes": null, - "id": 521, + "id": 556, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "10323:11:1", + "referencedDeclaration": 530, + "src": "10658:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6802,12 +7294,12 @@ }, { "argumentTypes": null, - "id": 522, + "id": 557, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "10336:13:1", + "referencedDeclaration": 532, + "src": "10671:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6815,12 +7307,12 @@ }, { "argumentTypes": null, - "id": 523, + "id": 558, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "10351:8:1", + "referencedDeclaration": 534, + "src": "10686:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6828,12 +7320,12 @@ }, { "argumentTypes": null, - "id": 524, + "id": 559, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10361:5:1", + "referencedDeclaration": 536, + "src": "10696:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6871,18 +7363,18 @@ "typeString": "uint256" } ], - "id": 517, + "id": 552, "name": "getSubscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 301, - "src": "10266:19:1", + "referencedDeclaration": 336, + "src": "10601:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" } }, - "id": 525, + "id": 560, "isConstant": false, "isLValue": false, "isPure": false, @@ -6890,14 +7382,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10266:110:1", + "src": "10601:110:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", - "src": "10239:137:1" + "src": "10574:137:1" }, { "expression": { @@ -6908,12 +7400,12 @@ "arguments": [ { "argumentTypes": null, - "id": 529, + "id": 564, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10473:4:1", + "referencedDeclaration": 524, + "src": "10808:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6921,12 +7413,12 @@ }, { "argumentTypes": null, - "id": 530, + "id": 565, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "10479:2:1", + "referencedDeclaration": 526, + "src": "10814:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6934,12 +7426,12 @@ }, { "argumentTypes": null, - "id": 531, + "id": 566, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "10483:12:1", + "referencedDeclaration": 528, + "src": "10818:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -6947,12 +7439,12 @@ }, { "argumentTypes": null, - "id": 532, + "id": 567, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "10497:11:1", + "referencedDeclaration": 530, + "src": "10832:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6960,12 +7452,12 @@ }, { "argumentTypes": null, - "id": 533, + "id": 568, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "10510:13:1", + "referencedDeclaration": 532, + "src": "10845:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6973,12 +7465,12 @@ }, { "argumentTypes": null, - "id": 534, + "id": 569, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "10525:8:1", + "referencedDeclaration": 534, + "src": "10860:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6986,12 +7478,12 @@ }, { "argumentTypes": null, - "id": 535, + "id": 570, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10535:5:1", + "referencedDeclaration": 536, + "src": "10870:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -6999,12 +7491,12 @@ }, { "argumentTypes": null, - "id": 536, + "id": 571, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 503, - "src": "10542:9:1", + "referencedDeclaration": 538, + "src": "10877:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -7046,18 +7538,18 @@ "typeString": "bytes memory" } ], - "id": 528, + "id": 563, "name": "isSubscriptionReady", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 410, - "src": "10453:19:1", + "referencedDeclaration": 445, + "src": "10788:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)" } }, - "id": 537, + "id": 572, "isConstant": false, "isLValue": false, "isPure": false, @@ -7065,7 +7557,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:99:1", + "src": "10788:99:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -7074,14 +7566,14 @@ { "argumentTypes": null, "hexValue": "537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574", - "id": 538, + "id": 573, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10554:67:1", + "src": "10889:67:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3", @@ -7101,21 +7593,21 @@ "typeString": "literal_string \"Subscription is not ready or conditions of transction are not met\"" } ], - "id": 527, + "id": 562, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "10444:7:1", + "referencedDeclaration": 1390, + "src": "10779:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 539, + "id": 574, "isConstant": false, "isLValue": false, "isPure": false, @@ -7123,20 +7615,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10444:179:1", + "src": "10779:179:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 540, + "id": 575, "nodeType": "ExpressionStatement", - "src": "10444:179:1" + "src": "10779:179:1" }, { "expression": { "argumentTypes": null, - "id": 549, + "id": 584, "isConstant": false, "isLValue": false, "isPure": false, @@ -7145,26 +7637,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 541, + "id": 576, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "10713:18:1", + "referencedDeclaration": 87, + "src": "11048:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 543, + "id": 578, "indexExpression": { "argumentTypes": null, - "id": 542, + "id": 577, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 516, - "src": "10732:16:1", + "referencedDeclaration": 551, + "src": "11067:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -7175,7 +7667,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "10713:36:1", + "src": "11048:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7188,12 +7680,12 @@ "arguments": [ { "argumentTypes": null, - "id": 547, + "id": 582, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "10772:13:1", + "referencedDeclaration": 532, + "src": "11107:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7211,18 +7703,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 544, + "id": 579, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1341, - "src": "10752:5:1", + "referencedDeclaration": 1376, + "src": "11087:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 545, + "id": 580, "isConstant": false, "isLValue": false, "isPure": false, @@ -7230,27 +7722,27 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10752:15:1", + "src": "11087:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 546, + "id": 581, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "10752:19:1", + "referencedDeclaration": 898, + "src": "11087:19:1", "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": 548, + "id": 583, "isConstant": false, "isLValue": false, "isPure": false, @@ -7258,21 +7750,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10752:34:1", + "src": "11087:34:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10713:73:1", + "src": "11048:73:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 550, + "id": 585, "nodeType": "ExpressionStatement", - "src": "10713:73:1" + "src": "11048:73:1" }, { "condition": { @@ -7281,19 +7773,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 555, + "id": 590, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 551, + "id": 586, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10905:5:1", + "referencedDeclaration": 536, + "src": "11240:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7305,26 +7797,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 552, + "id": 587, "name": "extraNonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "10913:10:1", + "referencedDeclaration": 91, + "src": "11248:10:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" } }, - "id": 554, + "id": 589, "indexExpression": { "argumentTypes": null, - "id": 553, + "id": 588, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10924:4:1", + "referencedDeclaration": 524, + "src": "11259:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7335,31 +7827,31 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10913:16:1", + "src": "11248:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10905:24:1", + "src": "11240:24:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 563, + "id": 598, "nodeType": "IfStatement", - "src": "10902:75:1", + "src": "11237:75:1", "trueBody": { - "id": 562, + "id": 597, "nodeType": "Block", - "src": "10930:47:1", + "src": "11265:47:1", "statements": [ { "expression": { "argumentTypes": null, - "id": 560, + "id": 595, "isConstant": false, "isLValue": false, "isPure": false, @@ -7368,26 +7860,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 556, + "id": 591, "name": "extraNonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "10942:10:1", + "referencedDeclaration": 91, + "src": "11277:10:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" } }, - "id": 558, + "id": 593, "indexExpression": { "argumentTypes": null, - "id": 557, + "id": 592, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10953:4:1", + "referencedDeclaration": 524, + "src": "11288:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7398,7 +7890,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "10942:16:1", + "src": "11277:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7408,42 +7900,42 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 559, + "id": 594, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10961:5:1", + "referencedDeclaration": 536, + "src": "11296:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10942:24:1", + "src": "11277:24:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 561, + "id": 596, "nodeType": "ExpressionStatement", - "src": "10942:24:1" + "src": "11277:24:1" } ] } }, { "assignments": [ - 565 + 600 ], "declarations": [ { "constant": false, - "id": 565, + "id": 600, "name": "startingBalance", "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11062:23:1", + "scope": 671, + "src": "11397:23:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -7451,10 +7943,10 @@ "typeString": "uint256" }, "typeName": { - "id": 564, + "id": 599, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11062:7:1", + "src": "11397:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7464,18 +7956,18 @@ "visibility": "internal" } ], - "id": 572, + "id": 607, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 570, + "id": 605, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11118:2:1", + "referencedDeclaration": 526, + "src": "11453:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7494,12 +7986,12 @@ "arguments": [ { "argumentTypes": null, - "id": 567, + "id": 602, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11094:12:1", + "referencedDeclaration": 528, + "src": "11429:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7513,18 +8005,18 @@ "typeString": "address" } ], - "id": 566, + "id": 601, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "11088:5:1", + "referencedDeclaration": 1302, + "src": "11423:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 568, + "id": 603, "isConstant": false, "isLValue": false, "isPure": false, @@ -7532,27 +8024,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11088:19:1", + "src": "11423:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 569, + "id": 604, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 925, - "src": "11088:29:1", + "referencedDeclaration": 960, + "src": "11423:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 571, + "id": 606, "isConstant": false, "isLValue": false, "isPure": false, @@ -7560,14 +8052,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11088:33:1", + "src": "11423:33:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "11062:59:1" + "src": "11397:59:1" }, { "expression": { @@ -7575,12 +8067,12 @@ "arguments": [ { "argumentTypes": null, - "id": 577, + "id": 612, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "11164:4:1", + "referencedDeclaration": 524, + "src": "11499:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7588,12 +8080,12 @@ }, { "argumentTypes": null, - "id": 578, + "id": 613, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11169:2:1", + "referencedDeclaration": 526, + "src": "11504:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7601,12 +8093,12 @@ }, { "argumentTypes": null, - "id": 579, + "id": 614, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "11172:11:1", + "referencedDeclaration": 530, + "src": "11507:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7633,12 +8125,12 @@ "arguments": [ { "argumentTypes": null, - "id": 574, + "id": 609, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11137:12:1", + "referencedDeclaration": 528, + "src": "11472:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7652,18 +8144,18 @@ "typeString": "address" } ], - "id": 573, + "id": 608, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "11131:5:1", + "referencedDeclaration": 1302, + "src": "11466:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 575, + "id": 610, "isConstant": false, "isLValue": false, "isPure": false, @@ -7671,27 +8163,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11131:19:1", + "src": "11466:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 576, + "id": 611, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transferFrom", "nodeType": "MemberAccess", - "referencedDeclaration": 1014, - "src": "11131:32:1", + "referencedDeclaration": 1049, + "src": "11466:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)" } }, - "id": 580, + "id": 615, "isConstant": false, "isLValue": false, "isPure": false, @@ -7699,15 +8191,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11131:53:1", + "src": "11466:53:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 581, + "id": 616, "nodeType": "ExpressionStatement", - "src": "11131:53:1" + "src": "11466:53:1" }, { "expression": { @@ -7719,7 +8211,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 593, + "id": 628, "isConstant": false, "isLValue": false, "isPure": false, @@ -7733,19 +8225,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 585, + "id": 620, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 583, + "id": 618, "name": "startingBalance", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 565, - "src": "11214:15:1", + "referencedDeclaration": 600, + "src": "11549:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7755,32 +8247,32 @@ "operator": "+", "rightExpression": { "argumentTypes": null, - "id": 584, + "id": 619, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "11230:11:1", + "referencedDeclaration": 530, + "src": "11565:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11214:27:1", + "src": "11549:27:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], - "id": 586, + "id": 621, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "11213:29:1", + "src": "11548:29:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -7793,12 +8285,12 @@ "arguments": [ { "argumentTypes": null, - "id": 591, + "id": 626, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11276:2:1", + "referencedDeclaration": 526, + "src": "11611:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7817,12 +8309,12 @@ "arguments": [ { "argumentTypes": null, - "id": 588, + "id": 623, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11252:12:1", + "referencedDeclaration": 528, + "src": "11587:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -7836,18 +8328,18 @@ "typeString": "address" } ], - "id": 587, + "id": 622, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "11246:5:1", + "referencedDeclaration": 1302, + "src": "11581:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 589, + "id": 624, "isConstant": false, "isLValue": false, "isPure": false, @@ -7855,27 +8347,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11246:19:1", + "src": "11581:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 590, + "id": 625, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 925, - "src": "11246:29:1", + "referencedDeclaration": 960, + "src": "11581:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 592, + "id": 627, "isConstant": false, "isLValue": false, "isPure": false, @@ -7883,13 +8375,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11246:33:1", + "src": "11581:33:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11213:66:1", + "src": "11548:66:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -7898,14 +8390,14 @@ { "argumentTypes": null, "hexValue": "45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79", - "id": 594, + "id": 629, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "11291:40:1", + "src": "11626:40:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7", @@ -7925,21 +8417,21 @@ "typeString": "literal_string \"ERC20 Balance did not change correctly\"" } ], - "id": 582, + "id": 617, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "11194:7:1", + "referencedDeclaration": 1390, + "src": "11529:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 595, + "id": 630, "isConstant": false, "isLValue": false, "isPure": false, @@ -7947,15 +8439,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11194:147:1", + "src": "11529:147:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 596, + "id": 631, "nodeType": "ExpressionStatement", - "src": "11194:147:1" + "src": "11529:147:1" }, { "expression": { @@ -7966,18 +8458,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 598, + "id": 633, "name": "checkSuccess", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 652, - "src": "11371:12:1", + "referencedDeclaration": 687, + "src": "11706:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", "typeString": "function () pure returns (bool)" } }, - "id": 599, + "id": 634, "isConstant": false, "isLValue": false, "isPure": false, @@ -7985,7 +8477,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11371:14:1", + "src": "11706:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -7994,14 +8486,14 @@ { "argumentTypes": null, "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564", - "id": 600, + "id": 635, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "11397:55:1", + "src": "11732:55:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28", @@ -8021,21 +8513,21 @@ "typeString": "literal_string \"Subscription::executeSubscription TransferFrom failed\"" } ], - "id": 597, + "id": 632, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "11352:7:1", + "referencedDeclaration": 1390, + "src": "11687:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 601, + "id": 636, "isConstant": false, "isLValue": false, "isPure": false, @@ -8043,15 +8535,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11352:112:1", + "src": "11687:112:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 602, + "id": 637, "nodeType": "ExpressionStatement", - "src": "11352:112:1" + "src": "11687:112:1" }, { "eventCall": { @@ -8059,12 +8551,12 @@ "arguments": [ { "argumentTypes": null, - "id": 604, + "id": 639, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "11514:4:1", + "referencedDeclaration": 524, + "src": "11849:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8072,12 +8564,12 @@ }, { "argumentTypes": null, - "id": 605, + "id": 640, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11520:2:1", + "referencedDeclaration": 526, + "src": "11855:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8085,12 +8577,12 @@ }, { "argumentTypes": null, - "id": 606, + "id": 641, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11524:12:1", + "referencedDeclaration": 528, + "src": "11859:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8098,12 +8590,12 @@ }, { "argumentTypes": null, - "id": 607, + "id": 642, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "11538:11:1", + "referencedDeclaration": 530, + "src": "11873:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8111,12 +8603,12 @@ }, { "argumentTypes": null, - "id": 608, + "id": 643, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "11551:13:1", + "referencedDeclaration": 532, + "src": "11886:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8124,12 +8616,12 @@ }, { "argumentTypes": null, - "id": 609, + "id": 644, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "11566:8:1", + "referencedDeclaration": 534, + "src": "11901:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8137,12 +8629,12 @@ }, { "argumentTypes": null, - "id": 610, + "id": 645, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "11576:5:1", + "referencedDeclaration": 536, + "src": "11911:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8180,18 +8672,18 @@ "typeString": "uint256" } ], - "id": 603, + "id": 638, "name": "ExecuteSubscription", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "11481:19:1", + "referencedDeclaration": 107, + "src": "11816:19:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" } }, - "id": 611, + "id": 646, "isConstant": false, "isLValue": false, "isPure": false, @@ -8199,15 +8691,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11481:110:1", + "src": "11816:110:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 612, + "id": 647, "nodeType": "EmitStatement", - "src": "11476:115:1" + "src": "11811:115:1" }, { "condition": { @@ -8216,19 +8708,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 615, + "id": 650, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 613, + "id": 648, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "11811:8:1", + "referencedDeclaration": 534, + "src": "12146:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8239,14 +8731,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 614, + "id": 649, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11822:1:1", + "src": "12157:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -8254,20 +8746,20 @@ }, "value": "0" }, - "src": "11811:12:1", + "src": "12146:12:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 633, + "id": 668, "nodeType": "IfStatement", - "src": "11807:822:1", + "src": "12142:822:1", "trueBody": { - "id": 632, + "id": 667, "nodeType": "Block", - "src": "11825:804:1", + "src": "12160:804:1", "statements": [ { "expression": { @@ -8275,12 +8767,12 @@ "arguments": [ { "argumentTypes": null, - "id": 620, + "id": 655, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "12437:4:1", + "referencedDeclaration": 524, + "src": "12772:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8290,18 +8782,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 621, + "id": 656, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "12443:3:1", + "referencedDeclaration": 1386, + "src": "12778:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 622, + "id": 657, "isConstant": false, "isLValue": false, "isPure": false, @@ -8309,7 +8801,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12443:10:1", + "src": "12778:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -8317,12 +8809,12 @@ }, { "argumentTypes": null, - "id": 623, + "id": 658, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "12455:8:1", + "referencedDeclaration": 534, + "src": "12790:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8349,12 +8841,12 @@ "arguments": [ { "argumentTypes": null, - "id": 617, + "id": 652, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "12410:12:1", + "referencedDeclaration": 528, + "src": "12745:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -8368,18 +8860,18 @@ "typeString": "address" } ], - "id": 616, + "id": 651, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "12404:5:1", + "referencedDeclaration": 1302, + "src": "12739:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 618, + "id": 653, "isConstant": false, "isLValue": false, "isPure": false, @@ -8387,27 +8879,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12404:19:1", + "src": "12739:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 619, + "id": 654, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transferFrom", "nodeType": "MemberAccess", - "referencedDeclaration": 1014, - "src": "12404:32:1", + "referencedDeclaration": 1049, + "src": "12739:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)" } }, - "id": 624, + "id": 659, "isConstant": false, "isLValue": false, "isPure": false, @@ -8415,15 +8907,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12404:60:1", + "src": "12739:60:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 625, + "id": 660, "nodeType": "ExpressionStatement", - "src": "12404:60:1" + "src": "12739:60:1" }, { "expression": { @@ -8434,18 +8926,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 627, + "id": 662, "name": "checkSuccess", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 652, - "src": "12503:12:1", + "referencedDeclaration": 687, + "src": "12838:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", "typeString": "function () pure returns (bool)" } }, - "id": 628, + "id": 663, "isConstant": false, "isLValue": false, "isPure": false, @@ -8453,7 +8945,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12503:14:1", + "src": "12838:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8462,14 +8954,14 @@ { "argumentTypes": null, "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74", - "id": 629, + "id": 664, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12535:69:1", + "src": "12870:69:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7", @@ -8489,21 +8981,21 @@ "typeString": "literal_string \"Subscription::executeSubscription Failed to pay gas as from account\"" } ], - "id": 626, + "id": 661, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "12478:7:1", + "referencedDeclaration": 1390, + "src": "12813:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 630, + "id": 665, "isConstant": false, "isLValue": false, "isPure": false, @@ -8511,15 +9003,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12478:140:1", + "src": "12813:140:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 631, + "id": 666, "nodeType": "ExpressionStatement", - "src": "12478:140:1" + "src": "12813:140:1" } ] } @@ -8528,14 +9020,14 @@ "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 634, + "id": 669, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "12646:4:1", + "src": "12981:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -8543,31 +9035,31 @@ }, "value": "true" }, - "functionReturnParameters": 507, - "id": 635, + "functionReturnParameters": 542, + "id": 670, "nodeType": "Return", - "src": "12639:11:1" + "src": "12974:11:1" } ] }, "documentation": null, - "id": 637, + "id": 672, "implemented": true, "kind": "function", "modifiers": [], "name": "executeSubscription", "nodeType": "FunctionDefinition", "parameters": { - "id": 504, + "id": 539, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 489, + "id": 524, "name": "from", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9604:12:1", + "scope": 672, + "src": "9939:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8575,10 +9067,10 @@ "typeString": "address" }, "typeName": { - "id": 488, + "id": 523, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9604:7:1", + "src": "9939:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -8590,11 +9082,11 @@ }, { "constant": false, - "id": 491, + "id": 526, "name": "to", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9643:10:1", + "scope": 672, + "src": "9978:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8602,10 +9094,10 @@ "typeString": "address" }, "typeName": { - "id": 490, + "id": 525, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9643:7:1", + "src": "9978:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -8617,11 +9109,11 @@ }, { "constant": false, - "id": 493, + "id": 528, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9679:20:1", + "scope": 672, + "src": "10014:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8629,10 +9121,10 @@ "typeString": "address" }, "typeName": { - "id": 492, + "id": 527, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9679:7:1", + "src": "10014:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -8644,11 +9136,11 @@ }, { "constant": false, - "id": 495, + "id": 530, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9751:19:1", + "scope": 672, + "src": "10086:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8656,10 +9148,10 @@ "typeString": "uint256" }, "typeName": { - "id": 494, + "id": 529, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9751:7:1", + "src": "10086:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8670,11 +9162,11 @@ }, { "constant": false, - "id": 497, + "id": 532, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9821:21:1", + "scope": 672, + "src": "10156:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8682,10 +9174,10 @@ "typeString": "uint256" }, "typeName": { - "id": 496, + "id": 531, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9821:7:1", + "src": "10156:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8696,11 +9188,11 @@ }, { "constant": false, - "id": 499, + "id": 534, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9893:16:1", + "scope": 672, + "src": "10228:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8708,10 +9200,10 @@ "typeString": "uint256" }, "typeName": { - "id": 498, + "id": 533, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9893:7:1", + "src": "10228:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8722,11 +9214,11 @@ }, { "constant": false, - "id": 501, + "id": 536, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9977:13:1", + "scope": 672, + "src": "10312:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8734,10 +9226,10 @@ "typeString": "uint256" }, "typeName": { - "id": 500, + "id": 535, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9977:7:1", + "src": "10312:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8748,11 +9240,11 @@ }, { "constant": false, - "id": 503, + "id": 538, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "10060:22:1", + "scope": 672, + "src": "10395:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -8760,10 +9252,10 @@ "typeString": "bytes" }, "typeName": { - "id": 502, + "id": 537, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "10060:5:1", + "src": "10395:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -8773,19 +9265,19 @@ "visibility": "internal" } ], - "src": "9594:544:1" + "src": "9929:544:1" }, "returnParameters": { - "id": 507, + "id": 542, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 506, + "id": 541, "name": "success", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "10171:12:1", + "scope": 672, + "src": "10506:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8793,10 +9285,10 @@ "typeString": "bool" }, "typeName": { - "id": 505, + "id": 540, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "10171:4:1", + "src": "10506:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8806,32 +9298,32 @@ "visibility": "internal" } ], - "src": "10170:14:1" + "src": "10505:14:1" }, - "scope": 675, - "src": "9566:3091:1", + "scope": 710, + "src": "9901:3091:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 651, + "id": 686, "nodeType": "Block", - "src": "13157:770:1", + "src": "13492:770:1", "statements": [ { "assignments": [ - 643 + 678 ], "declarations": [ { "constant": false, - "id": 643, + "id": 678, "name": "returnValue", "nodeType": "VariableDeclaration", - "scope": 651, - "src": "13167:19:1", + "scope": 686, + "src": "13502:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8839,10 +9331,10 @@ "typeString": "uint256" }, "typeName": { - "id": 642, + "id": 677, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "13167:7:1", + "src": "13502:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8852,18 +9344,18 @@ "visibility": "internal" } ], - "id": 645, + "id": 680, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 644, + "id": 679, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "13189:1:1", + "src": "13524:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -8872,33 +9364,33 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "13167:23:1" + "src": "13502:23:1" }, { "externalReferences": [ { "returnValue": { - "declaration": 643, + "declaration": 678, "isOffset": false, "isSlot": false, - "src": "13472:11:1", + "src": "13807:11:1", "valueSize": 1 } }, { "returnValue": { - "declaration": 643, + "declaration": 678, "isOffset": false, "isSlot": false, - "src": "13749:11:1", + "src": "14084:11:1", "valueSize": 1 } } ], - "id": 646, + "id": 681, "nodeType": "InlineAssembly", "operations": "{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}", - "src": "13268:635:1" + "src": "13603:635:1" }, { "expression": { @@ -8907,19 +9399,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 649, + "id": 684, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 647, + "id": 682, "name": "returnValue", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 643, - "src": "13904:11:1", + "referencedDeclaration": 678, + "src": "14239:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8930,14 +9422,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 648, + "id": 683, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "13919:1:1", + "src": "14254:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -8945,43 +9437,43 @@ }, "value": "0" }, - "src": "13904:16:1", + "src": "14239:16:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 641, - "id": 650, + "functionReturnParameters": 676, + "id": 685, "nodeType": "Return", - "src": "13897:23:1" + "src": "14232:23:1" } ] }, "documentation": "Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.", - "id": 652, + "id": 687, "implemented": true, "kind": "function", "modifiers": [], "name": "checkSuccess", "nodeType": "FunctionDefinition", "parameters": { - "id": 638, + "id": 673, "nodeType": "ParameterList", "parameters": [], - "src": "13093:7:1" + "src": "13428:7:1" }, "returnParameters": { - "id": 641, + "id": 676, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 640, + "id": 675, "name": "", "nodeType": "VariableDeclaration", - "scope": 652, - "src": "13147:4:1", + "scope": 687, + "src": "13482:4:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8989,10 +9481,10 @@ "typeString": "bool" }, "typeName": { - "id": 639, + "id": 674, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13147:4:1", + "src": "13482:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9002,19 +9494,19 @@ "visibility": "internal" } ], - "src": "13146:6:1" + "src": "13481:6:1" }, - "scope": 675, - "src": "13072:855:1", + "scope": 710, + "src": "13407:855:1", "stateMutability": "pure", "superFunction": null, "visibility": "private" }, { "body": { - "id": 666, + "id": 701, "nodeType": "Block", - "src": "14101:70:1", + "src": "14436:68:1", "statements": [ { "expression": { @@ -9026,7 +9518,7 @@ "typeIdentifier": "t_address_payable", "typeString": "address payable" }, - "id": 659, + "id": 694, "isConstant": false, "isLValue": false, "isPure": false, @@ -9035,18 +9527,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 656, + "id": 691, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "14117:3:1", + "referencedDeclaration": 1386, + "src": "14452:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 657, + "id": 692, "isConstant": false, "isLValue": false, "isPure": false, @@ -9054,7 +9546,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "14117:10:1", + "src": "14452:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -9064,18 +9556,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 658, - "name": "author", + "id": 693, + "name": "owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 69, - "src": "14129:6:1", + "src": "14464:5:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "14117:18:1", + "src": "14452:17:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9089,21 +9581,21 @@ "typeString": "bool" } ], - "id": 655, + "id": 690, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1354, - "src": "14109:7:1", + "referencedDeclaration": 1389, + "src": "14444:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, - "id": 660, + "id": 695, "isConstant": false, "isLValue": false, "isPure": false, @@ -9111,15 +9603,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14109:27:1", + "src": "14444:26:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 661, + "id": 696, "nodeType": "ExpressionStatement", - "src": "14109:27:1" + "src": "14444:26:1" }, { "expression": { @@ -9127,12 +9619,12 @@ "arguments": [ { "argumentTypes": null, - "id": 663, - "name": "author", + "id": 698, + "name": "owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 69, - "src": "14157:6:1", + "src": "14491:5:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -9146,18 +9638,18 @@ "typeString": "address payable" } ], - "id": 662, + "id": 697, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1359, - "src": "14144:12:1", + "referencedDeclaration": 1394, + "src": "14478:12:1", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$", "typeString": "function (address payable)" } }, - "id": 664, + "id": 699, "isConstant": false, "isLValue": false, "isPure": false, @@ -9165,48 +9657,48 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14144:20:1", + "src": "14478:19:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 665, + "id": 700, "nodeType": "ExpressionStatement", - "src": "14144:20:1" + "src": "14478:19:1" } ] }, "documentation": null, - "id": 667, + "id": 702, "implemented": true, "kind": "function", "modifiers": [], "name": "endContract", "nodeType": "FunctionDefinition", "parameters": { - "id": 653, + "id": 688, "nodeType": "ParameterList", "parameters": [], - "src": "14077:2:1" + "src": "14412:2:1" }, "returnParameters": { - "id": 654, + "id": 689, "nodeType": "ParameterList", "parameters": [], - "src": "14101:0:1" + "src": "14436:0:1" }, - "scope": 675, - "src": "14057:114:1", + "scope": 710, + "src": "14392:112:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "external" }, { "body": { - "id": 673, + "id": 708, "nodeType": "Block", - "src": "14277:25:1", + "src": "14610:25:1", "statements": [ { "expression": { @@ -9214,21 +9706,21 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 670, + "id": 705, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1356, - 1357 + 1391, + 1392 ], - "referencedDeclaration": 1356, - "src": "14286:6:1", + "referencedDeclaration": 1391, + "src": "14619:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$__$returns$__$", "typeString": "function () pure" } }, - "id": 671, + "id": 706, "isConstant": false, "isLValue": false, "isPure": false, @@ -9236,58 +9728,58 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14286:9:1", + "src": "14619:9:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 672, + "id": 707, "nodeType": "ExpressionStatement", - "src": "14286:9:1" + "src": "14619:9:1" } ] }, "documentation": null, - "id": 674, + "id": 709, "implemented": true, "kind": "fallback", "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { - "id": 668, + "id": 703, "nodeType": "ParameterList", "parameters": [], - "src": "14257:2:1" + "src": "14590:2:1" }, "returnParameters": { - "id": 669, + "id": 704, "nodeType": "ParameterList", "parameters": [], - "src": "14277:0:1" + "src": "14610:0:1" }, - "scope": 675, - "src": "14248:54:1", + "scope": 710, + "src": "14581:54:1", "stateMutability": "payable", "superFunction": null, "visibility": "external" } ], - "scope": 676, - "src": "1091:13213:1" + "scope": 711, + "src": "1091:13546:1" } ], - "src": "0:14305:1" + "src": "0:14638:1" }, "legacyAST": { "absolutePath": "/Users/danlipert/gitcoin/grants1337/contracts/Subscription.sol", "exportedSymbols": { "Subscription": [ - 675 + 710 ] }, - "id": 676, + "id": 711, "nodeType": "SourceUnit", "nodes": [ { @@ -9306,8 +9798,8 @@ "file": "openzeppelin-solidity/contracts/cryptography/ECDSA.sol", "id": 59, "nodeType": "ImportDirective", - "scope": 676, - "sourceUnit": 757, + "scope": 711, + "sourceUnit": 792, "src": "900:64:1", "symbolAliases": [], "unitAlias": "" @@ -9317,8 +9809,8 @@ "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", "id": 60, "nodeType": "ImportDirective", - "scope": 676, - "sourceUnit": 885, + "scope": 711, + "sourceUnit": 920, "src": "965:59:1", "symbolAliases": [], "unitAlias": "" @@ -9328,8 +9820,8 @@ "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol", "id": 61, "nodeType": "ImportDirective", - "scope": 676, - "sourceUnit": 1268, + "scope": 711, + "sourceUnit": 1303, "src": "1025:63:1", "symbolAliases": [], "unitAlias": "" @@ -9340,9 +9832,9 @@ "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 675, + "id": 710, "linearizedBaseContracts": [ - 675 + 710 ], "name": "Subscription", "nodeType": "ContractDefinition", @@ -9354,10 +9846,10 @@ "id": 62, "name": "ECDSA", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 756, + "referencedDeclaration": 791, "src": "1125:5:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ECDSA_$756", + "typeIdentifier": "t_contract$_ECDSA_$791", "typeString": "library ECDSA" } }, @@ -9381,10 +9873,10 @@ "id": 65, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 884, + "referencedDeclaration": 919, "src": "1154:8:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$884", + "typeIdentifier": "t_contract$_SafeMath_$919", "typeString": "library SafeMath" } }, @@ -9404,10 +9896,10 @@ { "constant": false, "id": 69, - "name": "author", + "name": "owner", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1212:29:1", + "scope": 710, + "src": "1212:28:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9431,10 +9923,36 @@ { "constant": false, "id": 71, + "name": "contractVersion", + "nodeType": "VariableDeclaration", + "scope": 710, + "src": "1246:28:1", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 70, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1246:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "id": 73, "name": "relayer", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1288:22:1", + "scope": 710, + "src": "1321:22:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9442,10 +9960,10 @@ "typeString": "address" }, "typeName": { - "id": 70, + "id": 72, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1288:7:1", + "src": "1321:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9457,11 +9975,11 @@ }, { "constant": false, - "id": 73, + "id": 75, "name": "requiredToAddress", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1470:32:1", + "scope": 710, + "src": "1503:32:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9469,10 +9987,10 @@ "typeString": "address" }, "typeName": { - "id": 72, + "id": 74, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1470:7:1", + "src": "1503:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9484,11 +10002,11 @@ }, { "constant": false, - "id": 75, + "id": 77, "name": "requiredTokenAddress", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1508:35:1", + "scope": 710, + "src": "1541:35:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9496,10 +10014,10 @@ "typeString": "address" }, "typeName": { - "id": 74, + "id": 76, "name": "address", "nodeType": "ElementaryTypeName", - "src": "1508:7:1", + "src": "1541:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9511,11 +10029,11 @@ }, { "constant": false, - "id": 77, + "id": 79, "name": "requiredTokenAmount", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1549:34:1", + "scope": 710, + "src": "1582:34:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9523,10 +10041,10 @@ "typeString": "uint256" }, "typeName": { - "id": 76, + "id": 78, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1549:7:1", + "src": "1582:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9537,11 +10055,11 @@ }, { "constant": false, - "id": 79, + "id": 81, "name": "requiredPeriodSeconds", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1589:36:1", + "scope": 710, + "src": "1622:36:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9549,10 +10067,10 @@ "typeString": "uint256" }, "typeName": { - "id": 78, + "id": 80, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1589:7:1", + "src": "1622:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9563,11 +10081,11 @@ }, { "constant": false, - "id": 81, + "id": 83, "name": "requiredGasPrice", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1631:31:1", + "scope": 710, + "src": "1664:31:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9575,10 +10093,10 @@ "typeString": "uint256" }, "typeName": { - "id": 80, + "id": 82, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1631:7:1", + "src": "1664:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9589,11 +10107,11 @@ }, { "constant": false, - "id": 85, + "id": 87, "name": "nextValidTimestamp", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "1854:53:1", + "scope": 710, + "src": "1887:53:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9601,28 +10119,28 @@ "typeString": "mapping(bytes32 => uint256)" }, "typeName": { - "id": 84, + "id": 86, "keyType": { - "id": 82, + "id": 84, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "1862:7:1", + "src": "1895:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "Mapping", - "src": "1854:27:1", + "src": "1887:27:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" }, "valueType": { - "id": 83, + "id": 85, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "1873:7:1", + "src": "1906:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9634,11 +10152,11 @@ }, { "constant": false, - "id": 89, + "id": 91, "name": "extraNonce", "nodeType": "VariableDeclaration", - "scope": 675, - "src": "2088:45:1", + "scope": 710, + "src": "2121:45:1", "stateVariable": true, "storageLocation": "default", "typeDescriptions": { @@ -9646,28 +10164,28 @@ "typeString": "mapping(address => uint256)" }, "typeName": { - "id": 88, + "id": 90, "keyType": { - "id": 86, + "id": 88, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2096:7:1", + "src": "2129:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "Mapping", - "src": "2088:27:1", + "src": "2121:27:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" }, "valueType": { - "id": 87, + "id": 89, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2107:7:1", + "src": "2140:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9680,21 +10198,21 @@ { "anonymous": false, "documentation": null, - "id": 105, + "id": 107, "name": "ExecuteSubscription", "nodeType": "EventDefinition", "parameters": { - "id": 104, + "id": 106, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 91, + "id": 93, "indexed": true, "name": "from", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2175:20:1", + "scope": 107, + "src": "2208:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9702,10 +10220,10 @@ "typeString": "address" }, "typeName": { - "id": 90, + "id": 92, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2175:7:1", + "src": "2208:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9717,12 +10235,12 @@ }, { "constant": false, - "id": 93, + "id": 95, "indexed": true, "name": "to", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2222:18:1", + "scope": 107, + "src": "2255:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9730,10 +10248,10 @@ "typeString": "address" }, "typeName": { - "id": 92, + "id": 94, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2222:7:1", + "src": "2255:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9745,12 +10263,12 @@ }, { "constant": false, - "id": 95, + "id": 97, "indexed": false, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2266:20:1", + "scope": 107, + "src": "2299:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9758,10 +10276,10 @@ "typeString": "address" }, "typeName": { - "id": 94, + "id": 96, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2266:7:1", + "src": "2299:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9773,12 +10291,12 @@ }, { "constant": false, - "id": 97, + "id": 99, "indexed": false, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2338:19:1", + "scope": 107, + "src": "2371:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9786,10 +10304,10 @@ "typeString": "uint256" }, "typeName": { - "id": 96, + "id": 98, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2338:7:1", + "src": "2371:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9800,12 +10318,12 @@ }, { "constant": false, - "id": 99, + "id": 101, "indexed": false, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2408:21:1", + "scope": 107, + "src": "2441:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9813,10 +10331,10 @@ "typeString": "uint256" }, "typeName": { - "id": 98, + "id": 100, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2408:7:1", + "src": "2441:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9827,12 +10345,12 @@ }, { "constant": false, - "id": 101, + "id": 103, "indexed": false, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2480:16:1", + "scope": 107, + "src": "2513:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9840,10 +10358,10 @@ "typeString": "uint256" }, "typeName": { - "id": 100, + "id": 102, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2480:7:1", + "src": "2513:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9854,12 +10372,12 @@ }, { "constant": false, - "id": 103, + "id": 105, "indexed": false, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 105, - "src": "2557:13:1", + "scope": 107, + "src": "2590:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9867,10 +10385,10 @@ "typeString": "uint256" }, "typeName": { - "id": 102, + "id": 104, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2557:7:1", + "src": "2590:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9880,28 +10398,28 @@ "visibility": "internal" } ], - "src": "2165:471:1" + "src": "2198:471:1" }, - "src": "2140:497:1" + "src": "2173:497:1" }, { "anonymous": false, "documentation": null, - "id": 121, + "id": 123, "name": "CancelSubscription", "nodeType": "EventDefinition", "parameters": { - "id": 120, + "id": 122, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 107, + "id": 109, "indexed": true, "name": "from", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2677:20:1", + "scope": 123, + "src": "2710:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9909,10 +10427,10 @@ "typeString": "address" }, "typeName": { - "id": 106, + "id": 108, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2677:7:1", + "src": "2710:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9924,12 +10442,12 @@ }, { "constant": false, - "id": 109, + "id": 111, "indexed": true, "name": "to", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2724:18:1", + "scope": 123, + "src": "2757:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9937,10 +10455,10 @@ "typeString": "address" }, "typeName": { - "id": 108, + "id": 110, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2724:7:1", + "src": "2757:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9952,12 +10470,12 @@ }, { "constant": false, - "id": 111, + "id": 113, "indexed": false, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2768:20:1", + "scope": 123, + "src": "2801:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9965,10 +10483,10 @@ "typeString": "address" }, "typeName": { - "id": 110, + "id": 112, "name": "address", "nodeType": "ElementaryTypeName", - "src": "2768:7:1", + "src": "2801:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -9980,12 +10498,12 @@ }, { "constant": false, - "id": 113, + "id": 115, "indexed": false, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2840:19:1", + "scope": 123, + "src": "2873:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9993,10 +10511,10 @@ "typeString": "uint256" }, "typeName": { - "id": 112, + "id": 114, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2840:7:1", + "src": "2873:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10007,12 +10525,12 @@ }, { "constant": false, - "id": 115, + "id": 117, "indexed": false, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2910:21:1", + "scope": 123, + "src": "2943:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10020,10 +10538,10 @@ "typeString": "uint256" }, "typeName": { - "id": 114, + "id": 116, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2910:7:1", + "src": "2943:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10034,12 +10552,12 @@ }, { "constant": false, - "id": 117, + "id": 119, "indexed": false, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "2982:16:1", + "scope": 123, + "src": "3015:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10047,10 +10565,10 @@ "typeString": "uint256" }, "typeName": { - "id": 116, + "id": 118, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "2982:7:1", + "src": "3015:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10061,12 +10579,12 @@ }, { "constant": false, - "id": 119, + "id": 121, "indexed": false, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 121, - "src": "3059:13:1", + "scope": 123, + "src": "3092:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10074,10 +10592,10 @@ "typeString": "uint256" }, "typeName": { - "id": 118, + "id": 120, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3059:7:1", + "src": "3092:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10087,32 +10605,103 @@ "visibility": "internal" } ], - "src": "2667:471:1" + "src": "2700:471:1" + }, + "src": "2676:496:1" + }, + { + "anonymous": false, + "documentation": null, + "id": 129, + "name": "ownershipChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 128, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 125, + "indexed": false, + "name": "oldOwner", + "nodeType": "VariableDeclaration", + "scope": 129, + "src": "3210:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 124, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3210:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 127, + "indexed": false, + "name": "newOwner", + "nodeType": "VariableDeclaration", + "scope": 129, + "src": "3236:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 126, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3236:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3200:58:1" }, - "src": "2643:496:1" + "src": "3178:81:1" }, { "body": { - "id": 167, + "id": 179, "nodeType": "Block", - "src": "3368:266:1", + "src": "3488:292:1", "statements": [ { "expression": { "argumentTypes": null, - "id": 140, + "id": 148, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 138, + "id": 146, "name": "requiredToAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "3378:17:1", + "referencedDeclaration": 75, + "src": "3498:17:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10122,43 +10711,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 139, + "id": 147, "name": "_toAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 123, - "src": "3396:10:1", + "referencedDeclaration": 131, + "src": "3516:10:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3378:28:1", + "src": "3498:28:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 141, + "id": 149, "nodeType": "ExpressionStatement", - "src": "3378:28:1" + "src": "3498:28:1" }, { "expression": { "argumentTypes": null, - "id": 144, + "id": 152, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 142, + "id": 150, "name": "requiredTokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "3416:20:1", + "referencedDeclaration": 77, + "src": "3536:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10168,43 +10757,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 143, + "id": 151, "name": "_tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 125, - "src": "3437:13:1", + "referencedDeclaration": 133, + "src": "3557:13:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3416:34:1", + "src": "3536:34:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 145, + "id": 153, "nodeType": "ExpressionStatement", - "src": "3416:34:1" + "src": "3536:34:1" }, { "expression": { "argumentTypes": null, - "id": 148, + "id": 156, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 146, + "id": 154, "name": "requiredTokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "3460:19:1", + "referencedDeclaration": 79, + "src": "3580:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10214,43 +10803,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 147, + "id": 155, "name": "_tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 127, - "src": "3480:12:1", + "referencedDeclaration": 135, + "src": "3600:12:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3460:32:1", + "src": "3580:32:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 149, + "id": 157, "nodeType": "ExpressionStatement", - "src": "3460:32:1" + "src": "3580:32:1" }, { "expression": { "argumentTypes": null, - "id": 152, + "id": 160, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 150, + "id": 158, "name": "requiredPeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "3502:21:1", + "referencedDeclaration": 81, + "src": "3622:21:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10260,43 +10849,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 151, + "id": 159, "name": "_periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 129, - "src": "3524:14:1", + "referencedDeclaration": 137, + "src": "3644:14:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3502:36:1", + "src": "3622:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 153, + "id": 161, "nodeType": "ExpressionStatement", - "src": "3502:36:1" + "src": "3622:36:1" }, { "expression": { "argumentTypes": null, - "id": 156, + "id": 164, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 154, + "id": 162, "name": "requiredGasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "3548:16:1", + "referencedDeclaration": 83, + "src": "3668:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10306,43 +10895,43 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 155, + "id": 163, "name": "_gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 131, - "src": "3565:9:1", + "referencedDeclaration": 139, + "src": "3685:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "3548:26:1", + "src": "3668:26:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 157, + "id": 165, "nodeType": "ExpressionStatement", - "src": "3548:26:1" + "src": "3668:26:1" }, { "expression": { "argumentTypes": null, - "id": 161, + "id": 169, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 158, - "name": "author", + "id": 166, + "name": "owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 69, - "src": "3584:6:1", + "src": "3704:5:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -10354,18 +10943,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 159, + "id": 167, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "3591:3:1", + "referencedDeclaration": 1386, + "src": "3710:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 160, + "id": 168, "isConstant": false, "isLValue": false, "isPure": false, @@ -10373,38 +10962,38 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "3591:10:1", + "src": "3710:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "3584:17:1", + "src": "3704:16:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "id": 162, + "id": 170, "nodeType": "ExpressionStatement", - "src": "3584:17:1" + "src": "3704:16:1" }, { "expression": { "argumentTypes": null, - "id": 165, + "id": 173, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 163, + "id": 171, "name": "relayer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "3611:7:1", + "referencedDeclaration": 73, + "src": "3730:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10414,47 +11003,98 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 164, + "id": 172, "name": "_relayer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 135, - "src": "3619:8:1", + "referencedDeclaration": 143, + "src": "3738:8:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "3611:16:1", + "src": "3730:16:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 166, + "id": 174, + "nodeType": "ExpressionStatement", + "src": "3730:16:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 175, + "name": "contractVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "3756:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "31", + "id": 176, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3772:1:1", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3756:17:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 178, "nodeType": "ExpressionStatement", - "src": "3611:16:1" + "src": "3756:17:1" } ] }, "documentation": null, - "id": 168, + "id": 180, "implemented": true, "kind": "constructor", "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { - "id": 136, + "id": 144, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 123, + "id": 131, "name": "_toAddress", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3166:18:1", + "scope": 180, + "src": "3286:18:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10462,10 +11102,10 @@ "typeString": "address" }, "typeName": { - "id": 122, + "id": 130, "name": "address", "nodeType": "ElementaryTypeName", - "src": "3166:7:1", + "src": "3286:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -10477,11 +11117,11 @@ }, { "constant": false, - "id": 125, + "id": 133, "name": "_tokenAddress", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3194:21:1", + "scope": 180, + "src": "3314:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10489,10 +11129,10 @@ "typeString": "address" }, "typeName": { - "id": 124, + "id": 132, "name": "address", "nodeType": "ElementaryTypeName", - "src": "3194:7:1", + "src": "3314:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -10504,11 +11144,11 @@ }, { "constant": false, - "id": 127, + "id": 135, "name": "_tokenAmount", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3225:20:1", + "scope": 180, + "src": "3345:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10516,10 +11156,10 @@ "typeString": "uint256" }, "typeName": { - "id": 126, + "id": 134, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3225:7:1", + "src": "3345:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10530,11 +11170,11 @@ }, { "constant": false, - "id": 129, + "id": 137, "name": "_periodSeconds", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3255:22:1", + "scope": 180, + "src": "3375:22:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10542,10 +11182,10 @@ "typeString": "uint256" }, "typeName": { - "id": 128, + "id": 136, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3255:7:1", + "src": "3375:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10556,11 +11196,11 @@ }, { "constant": false, - "id": 131, + "id": 139, "name": "_gasPrice", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3287:17:1", + "scope": 180, + "src": "3407:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10568,91 +11208,390 @@ "typeString": "uint256" }, "typeName": { - "id": 130, + "id": 138, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3287:7:1", + "src": "3407:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "value": null, - "visibility": "internal" + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 141, + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 180, + "src": "3434:14:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 140, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3434:5:1", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 143, + "name": "_relayer", + "nodeType": "VariableDeclaration", + "scope": 180, + "src": "3458:16:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 142, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3458:7:1", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3276:204:1" + }, + "returnParameters": { + "id": 145, + "nodeType": "ParameterList", + "parameters": [], + "src": "3488:0:1" + }, + "scope": 710, + "src": "3265:515:1", + "stateMutability": "nonpayable", + "superFunction": null, + "visibility": "public" + }, + { + "body": { + "id": 202, + "nodeType": "Block", + "src": "3855:114:1", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "id": 189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 186, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3871:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3871:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 188, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3883:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3871:17:1", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 185, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 1389, + 1390 + ], + "referencedDeclaration": 1389, + "src": "3863:7:1", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3863:26:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 191, + "nodeType": "ExpressionStatement", + "src": "3863:26:1" + }, + { + "expression": { + "argumentTypes": null, + "id": 194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 192, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3897:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 193, + "name": "_newOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 182, + "src": "3905:9:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3897:17:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 195, + "nodeType": "ExpressionStatement", + "src": "3897:17:1" }, { - "constant": false, - "id": 133, - "name": "_version", - "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3314:14:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 132, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "3314:5:1", + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 197, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1386, + "src": "3944:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3944:10:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 199, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 69, + "src": "3956:5:1", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 196, + "name": "ownershipChanged", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 129, + "src": "3927:16:1", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", + "typeString": "function (address,address)" + } + }, + "id": 200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3927:35:1", "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" } }, - "value": null, - "visibility": "internal" - }, + "id": 201, + "nodeType": "EmitStatement", + "src": "3922:40:1" + } + ] + }, + "documentation": null, + "id": 203, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "changeOwnership", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 183, + "nodeType": "ParameterList", + "parameters": [ { "constant": false, - "id": 135, - "name": "_relayer", + "id": 182, + "name": "_newOwner", "nodeType": "VariableDeclaration", - "scope": 168, - "src": "3338:16:1", + "scope": 203, + "src": "3811:25:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" + "typeIdentifier": "t_address_payable", + "typeString": "address payable" }, "typeName": { - "id": 134, + "id": 181, "name": "address", "nodeType": "ElementaryTypeName", - "src": "3338:7:1", - "stateMutability": "nonpayable", + "src": "3811:15:1", + "stateMutability": "payable", "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" + "typeIdentifier": "t_address_payable", + "typeString": "address payable" } }, "value": null, "visibility": "internal" } ], - "src": "3156:204:1" + "src": "3810:27:1" }, "returnParameters": { - "id": 137, + "id": 184, "nodeType": "ParameterList", "parameters": [], - "src": "3368:0:1" + "src": "3855:0:1" }, - "scope": 675, - "src": "3145:489:1", + "scope": 710, + "src": "3786:183:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 200, + "id": 235, "nodeType": "Block", - "src": "4037:227:1", + "src": "4372:227:1", "statements": [ { "condition": { @@ -10661,7 +11600,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 184, + "id": 219, "isConstant": false, "isLValue": false, "isPure": false, @@ -10670,26 +11609,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 177, + "id": 212, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "4050:18:1", + "referencedDeclaration": 87, + "src": "4385:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 179, + "id": 214, "indexExpression": { "argumentTypes": null, - "id": 178, + "id": 213, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 170, - "src": "4069:16:1", + "referencedDeclaration": 205, + "src": "4404:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -10700,7 +11639,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4050:36:1", + "src": "4385:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10713,7 +11652,7 @@ "arguments": [ { "argumentTypes": null, - "id": 182, + "id": 217, "isConstant": false, "isLValue": false, "isPure": true, @@ -10721,18 +11660,18 @@ "nodeType": "UnaryOperation", "operator": "-", "prefix": true, - "src": "4096:2:1", + "src": "4431:2:1", "subExpression": { "argumentTypes": null, "hexValue": "31", - "id": 181, + "id": 216, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "4097:1:1", + "src": "4432:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -10753,20 +11692,20 @@ "typeString": "int_const -1" } ], - "id": 180, + "id": 215, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "4088:7:1", + "src": "4423:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint256" }, - "id": 183, + "id": 218, "isConstant": false, "isLValue": false, "isPure": true, @@ -10774,39 +11713,39 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4088:11:1", + "src": "4423:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "4050:49:1", + "src": "4385:49:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 188, + "id": 223, "nodeType": "IfStatement", - "src": "4047:88:1", + "src": "4382:88:1", "trueBody": { - "id": 187, + "id": 222, "nodeType": "Block", - "src": "4100:35:1", + "src": "4435:35:1", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "66616c7365", - "id": 185, + "id": 220, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "4119:5:1", + "src": "4454:5:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -10814,10 +11753,10 @@ }, "value": "false" }, - "functionReturnParameters": 176, - "id": 186, + "functionReturnParameters": 211, + "id": 221, "nodeType": "Return", - "src": "4112:12:1" + "src": "4447:12:1" } ] } @@ -10832,7 +11771,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 197, + "id": 232, "isConstant": false, "isLValue": false, "isPure": false, @@ -10841,18 +11780,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 189, + "id": 224, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1341, - "src": "4152:5:1", + "referencedDeclaration": 1376, + "src": "4487:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 190, + "id": 225, "isConstant": false, "isLValue": false, "isPure": false, @@ -10860,7 +11799,7 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "4152:15:1", + "src": "4487:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10873,12 +11812,12 @@ "arguments": [ { "argumentTypes": null, - "id": 195, + "id": 230, "name": "gracePeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 172, - "src": "4228:18:1", + "referencedDeclaration": 207, + "src": "4563:18:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10896,26 +11835,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 191, + "id": 226, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "4187:18:1", + "referencedDeclaration": 87, + "src": "4522:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 193, + "id": 228, "indexExpression": { "argumentTypes": null, - "id": 192, + "id": 227, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 170, - "src": "4206:16:1", + "referencedDeclaration": 205, + "src": "4541:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -10926,27 +11865,27 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "4187:36:1", + "src": "4522:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 194, + "id": 229, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "4187:40:1", + "referencedDeclaration": 898, + "src": "4522:40:1", "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": 196, + "id": 231, "isConstant": false, "isLValue": false, "isPure": false, @@ -10954,57 +11893,57 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "4187:60:1", + "src": "4522:60:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "4152:95:1", + "src": "4487:95:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], - "id": 198, + "id": 233, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "4151:106:1", + "src": "4486:106:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 176, - "id": 199, + "functionReturnParameters": 211, + "id": 234, "nodeType": "Return", - "src": "4144:113:1" + "src": "4479:113:1" } ] }, "documentation": null, - "id": 201, + "id": 236, "implemented": true, "kind": "function", "modifiers": [], "name": "isSubscriptionActive", "nodeType": "FunctionDefinition", "parameters": { - "id": 173, + "id": 208, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 170, + "id": 205, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 201, - "src": "3913:24:1", + "scope": 236, + "src": "4248:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11012,10 +11951,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 169, + "id": 204, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "3913:7:1", + "src": "4248:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -11026,11 +11965,11 @@ }, { "constant": false, - "id": 172, + "id": 207, "name": "gracePeriodSeconds", "nodeType": "VariableDeclaration", - "scope": 201, - "src": "3947:26:1", + "scope": 236, + "src": "4282:26:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11038,10 +11977,10 @@ "typeString": "uint256" }, "typeName": { - "id": 171, + "id": 206, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "3947:7:1", + "src": "4282:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11051,19 +11990,19 @@ "visibility": "internal" } ], - "src": "3903:76:1" + "src": "4238:76:1" }, "returnParameters": { - "id": 176, + "id": 211, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 175, + "id": 210, "name": "", "nodeType": "VariableDeclaration", - "scope": 201, - "src": "4027:4:1", + "scope": 236, + "src": "4362:4:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11071,10 +12010,10 @@ "typeString": "bool" }, "typeName": { - "id": 174, + "id": 209, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "4027:4:1", + "src": "4362:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11084,19 +12023,19 @@ "visibility": "internal" } ], - "src": "4026:6:1" + "src": "4361:6:1" }, - "scope": 675, - "src": "3874:390:1", + "scope": 710, + "src": "4209:390:1", "stateMutability": "view", "superFunction": null, "visibility": "external" }, { "body": { - "id": 300, + "id": 335, "nodeType": "Block", - "src": "4969:999:1", + "src": "5304:999:1", "statements": [ { "expression": { @@ -11108,7 +12047,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 229, + "id": 264, "isConstant": false, "isLValue": false, "isPure": false, @@ -11119,19 +12058,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 225, + "id": 260, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 221, + "id": 256, "name": "requiredToAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "5093:17:1", + "referencedDeclaration": 75, + "src": "5428:17:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11145,14 +12084,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 223, + "id": 258, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5122:1:1", + "src": "5457:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -11168,20 +12107,20 @@ "typeString": "int_const 0" } ], - "id": 222, + "id": 257, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5114:7:1", + "src": "5449:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 224, + "id": 259, "isConstant": false, "isLValue": false, "isPure": true, @@ -11189,13 +12128,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5114:10:1", + "src": "5449:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "5093:31:1", + "src": "5428:31:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11209,19 +12148,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 228, + "id": 263, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 226, + "id": 261, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 205, - "src": "5128:2:1", + "referencedDeclaration": 240, + "src": "5463:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11231,24 +12170,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 227, + "id": 262, "name": "requiredToAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 73, - "src": "5134:17:1", + "referencedDeclaration": 75, + "src": "5469:17:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "5128:23:1", + "src": "5463:23:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5093:58:1", + "src": "5428:58:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11257,14 +12196,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564546f41646472657373204661696c757265", - "id": 230, + "id": 265, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5153:27:1", + "src": "5488:27:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_1780bcf794aab203f72828cdd8822e2720f64bbe143d842ce30f054eabc78430", @@ -11284,21 +12223,21 @@ "typeString": "literal_string \"requiredToAddress Failure\"" } ], - "id": 220, + "id": 255, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5084:7:1", + "referencedDeclaration": 1390, + "src": "5419:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 231, + "id": 266, "isConstant": false, "isLValue": false, "isPure": false, @@ -11306,15 +12245,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5084:98:1", + "src": "5419:98:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 232, + "id": 267, "nodeType": "ExpressionStatement", - "src": "5084:98:1" + "src": "5419:98:1" }, { "expression": { @@ -11326,7 +12265,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 242, + "id": 277, "isConstant": false, "isLValue": false, "isPure": false, @@ -11337,19 +12276,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 238, + "id": 273, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 234, + "id": 269, "name": "requiredTokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "5201:20:1", + "referencedDeclaration": 77, + "src": "5536:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11363,14 +12302,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 236, + "id": 271, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5233:1:1", + "src": "5568:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -11386,20 +12325,20 @@ "typeString": "int_const 0" } ], - "id": 235, + "id": 270, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5225:7:1", + "src": "5560:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 237, + "id": 272, "isConstant": false, "isLValue": false, "isPure": true, @@ -11407,13 +12346,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5225:10:1", + "src": "5560:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "5201:34:1", + "src": "5536:34:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11427,19 +12366,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 241, + "id": 276, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 239, + "id": 274, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 207, - "src": "5239:12:1", + "referencedDeclaration": 242, + "src": "5574:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11449,24 +12388,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 240, + "id": 275, "name": "requiredTokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 75, - "src": "5255:20:1", + "referencedDeclaration": 77, + "src": "5590:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "5239:36:1", + "src": "5574:36:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5201:74:1", + "src": "5536:74:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11475,14 +12414,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564546f6b656e41646472657373204661696c757265", - "id": 243, + "id": 278, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5277:30:1", + "src": "5612:30:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_0a4155ffffdaca064dc0492130d948bbabedf9b4a3c7b4dba7701d2aa083061c", @@ -11502,21 +12441,21 @@ "typeString": "literal_string \"requiredTokenAddress Failure\"" } ], - "id": 233, + "id": 268, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5192:7:1", + "referencedDeclaration": 1390, + "src": "5527:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 244, + "id": 279, "isConstant": false, "isLValue": false, "isPure": false, @@ -11524,15 +12463,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5192:118:1", + "src": "5527:118:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 245, + "id": 280, "nodeType": "ExpressionStatement", - "src": "5192:118:1" + "src": "5527:118:1" }, { "expression": { @@ -11544,7 +12483,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 253, + "id": 288, "isConstant": false, "isLValue": false, "isPure": false, @@ -11555,19 +12494,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 249, + "id": 284, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 247, + "id": 282, "name": "requiredTokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "5329:19:1", + "referencedDeclaration": 79, + "src": "5664:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11578,14 +12517,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 248, + "id": 283, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5352:1:1", + "src": "5687:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -11593,7 +12532,7 @@ }, "value": "0" }, - "src": "5329:24:1", + "src": "5664:24:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11607,19 +12546,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 252, + "id": 287, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 250, + "id": 285, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 209, - "src": "5357:11:1", + "referencedDeclaration": 244, + "src": "5692:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11629,24 +12568,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 251, + "id": 286, "name": "requiredTokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "5372:19:1", + "referencedDeclaration": 79, + "src": "5707:19:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "5357:34:1", + "src": "5692:34:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5329:62:1", + "src": "5664:62:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11655,14 +12594,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564546f6b656e416d6f756e74204661696c757265", - "id": 254, + "id": 289, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5393:29:1", + "src": "5728:29:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_0dfea9330de22cf3a44a9f589d334e51ce03eb93b887fccb426b90a5cf902785", @@ -11682,21 +12621,21 @@ "typeString": "literal_string \"requiredTokenAmount Failure\"" } ], - "id": 246, + "id": 281, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5320:7:1", + "referencedDeclaration": 1390, + "src": "5655:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 255, + "id": 290, "isConstant": false, "isLValue": false, "isPure": false, @@ -11704,15 +12643,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5320:105:1", + "src": "5655:105:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 256, + "id": 291, "nodeType": "ExpressionStatement", - "src": "5320:105:1" + "src": "5655:105:1" }, { "expression": { @@ -11724,7 +12663,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 264, + "id": 299, "isConstant": false, "isLValue": false, "isPure": false, @@ -11735,19 +12674,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 260, + "id": 295, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 258, + "id": 293, "name": "requiredPeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "5444:21:1", + "referencedDeclaration": 81, + "src": "5779:21:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11758,14 +12697,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 259, + "id": 294, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5469:1:1", + "src": "5804:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -11773,7 +12712,7 @@ }, "value": "0" }, - "src": "5444:26:1", + "src": "5779:26:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11787,19 +12726,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 263, + "id": 298, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 261, + "id": 296, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 211, - "src": "5474:13:1", + "referencedDeclaration": 246, + "src": "5809:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11809,24 +12748,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 262, + "id": 297, "name": "requiredPeriodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "5491:21:1", + "referencedDeclaration": 81, + "src": "5826:21:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "5474:38:1", + "src": "5809:38:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5444:68:1", + "src": "5779:68:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11835,14 +12774,14 @@ { "argumentTypes": null, "hexValue": "7265717569726564506572696f645365636f6e6473204661696c757265", - "id": 265, + "id": 300, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5514:31:1", + "src": "5849:31:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_829576bc6f2a6cbacb797e1e609350189547b06e13145f9ac8afe9b515c8265b", @@ -11862,21 +12801,21 @@ "typeString": "literal_string \"requiredPeriodSeconds Failure\"" } ], - "id": 257, + "id": 292, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5435:7:1", + "referencedDeclaration": 1390, + "src": "5770:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 266, + "id": 301, "isConstant": false, "isLValue": false, "isPure": false, @@ -11884,15 +12823,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5435:113:1", + "src": "5770:113:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 267, + "id": 302, "nodeType": "ExpressionStatement", - "src": "5435:113:1" + "src": "5770:113:1" }, { "expression": { @@ -11904,7 +12843,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 275, + "id": 310, "isConstant": false, "isLValue": false, "isPure": false, @@ -11915,19 +12854,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 271, + "id": 306, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 269, + "id": 304, "name": "requiredGasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "5567:16:1", + "referencedDeclaration": 83, + "src": "5902:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11938,14 +12877,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 270, + "id": 305, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5587:1:1", + "src": "5922:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -11953,7 +12892,7 @@ }, "value": "0" }, - "src": "5567:21:1", + "src": "5902:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11967,19 +12906,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 274, + "id": 309, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 272, + "id": 307, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "5592:8:1", + "referencedDeclaration": 248, + "src": "5927:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11989,24 +12928,24 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 273, + "id": 308, "name": "requiredGasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "5604:16:1", + "referencedDeclaration": 83, + "src": "5939:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "5592:28:1", + "src": "5927:28:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "5567:53:1", + "src": "5902:53:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12015,14 +12954,14 @@ { "argumentTypes": null, "hexValue": "72657175697265644761735072696365204661696c757265", - "id": 276, + "id": 311, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "5622:26:1", + "src": "5957:26:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_0549ea7d3e61063659accdb56e119c83714b122fe72a3eca04edb4ce124397bb", @@ -12042,21 +12981,21 @@ "typeString": "literal_string \"requiredGasPrice Failure\"" } ], - "id": 268, + "id": 303, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "5558:7:1", + "referencedDeclaration": 1390, + "src": "5893:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 277, + "id": 312, "isConstant": false, "isLValue": false, "isPure": false, @@ -12064,15 +13003,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5558:93:1", + "src": "5893:93:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 278, + "id": 313, "nodeType": "ExpressionStatement", - "src": "5558:93:1" + "src": "5893:93:1" }, { "expression": { @@ -12087,14 +13026,14 @@ { "argumentTypes": null, "hexValue": "30783139", - "id": 283, + "id": 318, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5731:4:1", + "src": "6066:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_25_by_1", @@ -12110,20 +13049,20 @@ "typeString": "int_const 25" } ], - "id": 282, + "id": 317, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5726:4:1", + "src": "6061:4:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, - "id": 284, + "id": 319, "isConstant": false, "isLValue": false, "isPure": true, @@ -12131,7 +13070,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5726:10:1", + "src": "6061:10:1", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" @@ -12143,14 +13082,14 @@ { "argumentTypes": null, "hexValue": "30", - "id": 286, + "id": 321, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "5759:1:1", + "src": "6094:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -12166,20 +13105,20 @@ "typeString": "int_const 0" } ], - "id": 285, + "id": 320, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5754:4:1", + "src": "6089:4:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes1_$", "typeString": "type(bytes1)" }, "typeName": "byte" }, - "id": 287, + "id": 322, "isConstant": false, "isLValue": false, "isPure": true, @@ -12187,7 +13126,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5754:7:1", + "src": "6089:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes1", "typeString": "bytes1" @@ -12198,14 +13137,14 @@ "arguments": [ { "argumentTypes": null, - "id": 289, + "id": 324, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1374, - "src": "5787:4:1", + "referencedDeclaration": 1409, + "src": "6122:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } } @@ -12213,24 +13152,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } ], - "id": 288, + "id": 323, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "5779:7:1", + "src": "6114:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 290, + "id": 325, "isConstant": false, "isLValue": false, "isPure": false, @@ -12238,7 +13177,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5779:13:1", + "src": "6114:13:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -12246,12 +13185,12 @@ }, { "argumentTypes": null, - "id": 291, + "id": 326, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 203, - "src": "5810:4:1", + "referencedDeclaration": 238, + "src": "6145:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12259,12 +13198,12 @@ }, { "argumentTypes": null, - "id": 292, + "id": 327, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 205, - "src": "5832:2:1", + "referencedDeclaration": 240, + "src": "6167:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12272,12 +13211,12 @@ }, { "argumentTypes": null, - "id": 293, + "id": 328, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 207, - "src": "5852:12:1", + "referencedDeclaration": 242, + "src": "6187:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12285,12 +13224,12 @@ }, { "argumentTypes": null, - "id": 294, + "id": 329, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 209, - "src": "5882:11:1", + "referencedDeclaration": 244, + "src": "6217:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12298,12 +13237,12 @@ }, { "argumentTypes": null, - "id": 295, + "id": 330, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 211, - "src": "5911:13:1", + "referencedDeclaration": 246, + "src": "6246:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12311,12 +13250,12 @@ }, { "argumentTypes": null, - "id": 296, + "id": 331, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 213, - "src": "5942:8:1", + "referencedDeclaration": 248, + "src": "6277:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12364,18 +13303,18 @@ ], "expression": { "argumentTypes": null, - "id": 280, + "id": 315, "name": "abi", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1338, - "src": "5692:3:1", + "referencedDeclaration": 1373, + "src": "6027:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_abi", "typeString": "abi" } }, - "id": 281, + "id": 316, "isConstant": false, "isLValue": false, "isPure": true, @@ -12383,13 +13322,13 @@ "memberName": "encodePacked", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "5692:16:1", + "src": "6027:16:1", "typeDescriptions": { "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", "typeString": "function () pure returns (bytes memory)" } }, - "id": 297, + "id": 332, "isConstant": false, "isLValue": false, "isPure": false, @@ -12397,7 +13336,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5692:268:1", + "src": "6027:268:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -12411,18 +13350,18 @@ "typeString": "bytes memory" } ], - "id": 279, + "id": 314, "name": "keccak256", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1345, - "src": "5669:9:1", + "referencedDeclaration": 1380, + "src": "6004:9:1", "typeDescriptions": { "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", "typeString": "function (bytes memory) pure returns (bytes32)" } }, - "id": 298, + "id": 333, "isConstant": false, "isLValue": false, "isPure": false, @@ -12430,37 +13369,37 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "5669:292:1", + "src": "6004:292:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "functionReturnParameters": 219, - "id": 299, + "functionReturnParameters": 254, + "id": 334, "nodeType": "Return", - "src": "5662:299:1" + "src": "5997:299:1" } ] }, "documentation": null, - "id": 301, + "id": 336, "implemented": true, "kind": "function", "modifiers": [], "name": "getSubscriptionHash", "nodeType": "FunctionDefinition", "parameters": { - "id": 216, + "id": 251, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 203, + "id": 238, "name": "from", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4458:12:1", + "scope": 336, + "src": "4793:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12468,10 +13407,10 @@ "typeString": "address" }, "typeName": { - "id": 202, + "id": 237, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4458:7:1", + "src": "4793:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -12483,11 +13422,11 @@ }, { "constant": false, - "id": 205, + "id": 240, "name": "to", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4497:10:1", + "scope": 336, + "src": "4832:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12495,10 +13434,10 @@ "typeString": "address" }, "typeName": { - "id": 204, + "id": 239, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4497:7:1", + "src": "4832:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -12510,11 +13449,11 @@ }, { "constant": false, - "id": 207, + "id": 242, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4533:20:1", + "scope": 336, + "src": "4868:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12522,10 +13461,10 @@ "typeString": "address" }, "typeName": { - "id": 206, + "id": 241, "name": "address", "nodeType": "ElementaryTypeName", - "src": "4533:7:1", + "src": "4868:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -12537,11 +13476,11 @@ }, { "constant": false, - "id": 209, + "id": 244, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4605:19:1", + "scope": 336, + "src": "4940:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12549,10 +13488,10 @@ "typeString": "uint256" }, "typeName": { - "id": 208, + "id": 243, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4605:7:1", + "src": "4940:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12563,11 +13502,11 @@ }, { "constant": false, - "id": 211, + "id": 246, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4675:21:1", + "scope": 336, + "src": "5010:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12575,10 +13514,10 @@ "typeString": "uint256" }, "typeName": { - "id": 210, + "id": 245, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4675:7:1", + "src": "5010:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12589,11 +13528,11 @@ }, { "constant": false, - "id": 213, + "id": 248, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4747:16:1", + "scope": 336, + "src": "5082:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12601,10 +13540,10 @@ "typeString": "uint256" }, "typeName": { - "id": 212, + "id": 247, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4747:7:1", + "src": "5082:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12615,11 +13554,11 @@ }, { "constant": false, - "id": 215, + "id": 250, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4831:13:1", + "scope": 336, + "src": "5166:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12627,10 +13566,10 @@ "typeString": "uint256" }, "typeName": { - "id": 214, + "id": 249, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "4831:7:1", + "src": "5166:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12640,19 +13579,19 @@ "visibility": "internal" } ], - "src": "4448:462:1" + "src": "4783:462:1" }, "returnParameters": { - "id": 219, + "id": 254, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 218, + "id": 253, "name": "", "nodeType": "VariableDeclaration", - "scope": 301, - "src": "4956:7:1", + "scope": 336, + "src": "5291:7:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12660,10 +13599,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 217, + "id": 252, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "4956:7:1", + "src": "5291:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -12673,19 +13612,19 @@ "visibility": "internal" } ], - "src": "4955:9:1" + "src": "5290:9:1" }, - "scope": 675, - "src": "4420:1548:1", + "scope": 710, + "src": "4755:1548:1", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 317, + "id": 352, "nodeType": "Block", - "src": "6263:84:1", + "src": "6598:84:1", "statements": [ { "expression": { @@ -12693,12 +13632,12 @@ "arguments": [ { "argumentTypes": null, - "id": 314, + "id": 349, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 305, - "src": "6330:9:1", + "referencedDeclaration": 340, + "src": "6665:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -12719,32 +13658,32 @@ "argumentTypes": [], "expression": { "argumentTypes": null, - "id": 310, + "id": 345, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 303, - "src": "6280:16:1", + "referencedDeclaration": 338, + "src": "6615:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 311, + "id": 346, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "toEthSignedMessageHash", "nodeType": "MemberAccess", - "referencedDeclaration": 755, - "src": "6280:39:1", + "referencedDeclaration": 790, + "src": "6615:39:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$", "typeString": "function (bytes32) pure returns (bytes32)" } }, - "id": 312, + "id": 347, "isConstant": false, "isLValue": false, "isPure": false, @@ -12752,27 +13691,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6280:41:1", + "src": "6615:41:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, - "id": 313, + "id": 348, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "recover", "nodeType": "MemberAccess", - "referencedDeclaration": 739, - "src": "6280:49:1", + "referencedDeclaration": 774, + "src": "6615:49:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$bound_to$_t_bytes32_$", "typeString": "function (bytes32,bytes memory) pure returns (address)" } }, - "id": 315, + "id": 350, "isConstant": false, "isLValue": false, "isPure": false, @@ -12780,37 +13719,37 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6280:60:1", + "src": "6615:60:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "functionReturnParameters": 309, - "id": 316, + "functionReturnParameters": 344, + "id": 351, "nodeType": "Return", - "src": "6273:67:1" + "src": "6608:67:1" } ] }, "documentation": null, - "id": 318, + "id": 353, "implemented": true, "kind": "function", "modifiers": [], "name": "getSubscriptionSigner", "nodeType": "FunctionDefinition", "parameters": { - "id": 306, + "id": 341, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 303, + "id": 338, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 318, - "src": "6069:24:1", + "scope": 353, + "src": "6404:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12818,10 +13757,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 302, + "id": 337, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "6069:7:1", + "src": "6404:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -12832,11 +13771,11 @@ }, { "constant": false, - "id": 305, + "id": 340, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 318, - "src": "6126:22:1", + "scope": 353, + "src": "6461:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -12844,10 +13783,10 @@ "typeString": "bytes" }, "typeName": { - "id": 304, + "id": 339, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "6126:5:1", + "src": "6461:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -12857,19 +13796,19 @@ "visibility": "internal" } ], - "src": "6059:145:1" + "src": "6394:145:1" }, "returnParameters": { - "id": 309, + "id": 344, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 308, + "id": 343, "name": "", "nodeType": "VariableDeclaration", - "scope": 318, - "src": "6250:7:1", + "scope": 353, + "src": "6585:7:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12877,10 +13816,10 @@ "typeString": "address" }, "typeName": { - "id": 307, + "id": 342, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6250:7:1", + "src": "6585:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -12891,32 +13830,32 @@ "visibility": "internal" } ], - "src": "6249:9:1" + "src": "6584:9:1" }, - "scope": 675, - "src": "6029:318:1", + "scope": 710, + "src": "6364:318:1", "stateMutability": "pure", "superFunction": null, "visibility": "public" }, { "body": { - "id": 409, + "id": 444, "nodeType": "Block", - "src": "7098:633:1", + "src": "7433:633:1", "statements": [ { "assignments": [ - 340 + 375 ], "declarations": [ { "constant": false, - "id": 340, + "id": 375, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7108:24:1", + "scope": 444, + "src": "7443:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12924,10 +13863,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 339, + "id": 374, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "7108:7:1", + "src": "7443:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -12937,18 +13876,18 @@ "visibility": "internal" } ], - "id": 350, + "id": 385, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 342, + "id": 377, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7168:4:1", + "referencedDeclaration": 355, + "src": "7503:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12956,12 +13895,12 @@ }, { "argumentTypes": null, - "id": 343, + "id": 378, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 322, - "src": "7174:2:1", + "referencedDeclaration": 357, + "src": "7509:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12969,12 +13908,12 @@ }, { "argumentTypes": null, - "id": 344, + "id": 379, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "7178:12:1", + "referencedDeclaration": 359, + "src": "7513:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12982,12 +13921,12 @@ }, { "argumentTypes": null, - "id": 345, + "id": 380, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 326, - "src": "7192:11:1", + "referencedDeclaration": 361, + "src": "7527:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12995,12 +13934,12 @@ }, { "argumentTypes": null, - "id": 346, + "id": 381, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 328, - "src": "7205:13:1", + "referencedDeclaration": 363, + "src": "7540:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13008,12 +13947,12 @@ }, { "argumentTypes": null, - "id": 347, + "id": 382, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "7220:8:1", + "referencedDeclaration": 365, + "src": "7555:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13021,12 +13960,12 @@ }, { "argumentTypes": null, - "id": 348, + "id": 383, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 332, - "src": "7230:5:1", + "referencedDeclaration": 367, + "src": "7565:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13064,18 +14003,18 @@ "typeString": "uint256" } ], - "id": 341, + "id": 376, "name": "getSubscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 301, - "src": "7135:19:1", + "referencedDeclaration": 336, + "src": "7470:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" } }, - "id": 349, + "id": 384, "isConstant": false, "isLValue": false, "isPure": false, @@ -13083,27 +14022,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7135:110:1", + "src": "7470:110:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", - "src": "7108:137:1" + "src": "7443:137:1" }, { "assignments": [ - 352 + 387 ], "declarations": [ { "constant": false, - "id": 352, + "id": 387, "name": "signer", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7255:14:1", + "scope": 444, + "src": "7590:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13111,10 +14050,10 @@ "typeString": "address" }, "typeName": { - "id": 351, + "id": 386, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7255:7:1", + "src": "7590:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -13125,18 +14064,18 @@ "visibility": "internal" } ], - "id": 357, + "id": 392, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 354, + "id": 389, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 340, - "src": "7294:16:1", + "referencedDeclaration": 375, + "src": "7629:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -13144,12 +14083,12 @@ }, { "argumentTypes": null, - "id": 355, + "id": 390, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 334, - "src": "7312:9:1", + "referencedDeclaration": 369, + "src": "7647:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -13167,18 +14106,18 @@ "typeString": "bytes memory" } ], - "id": 353, + "id": 388, "name": "getSubscriptionSigner", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "7272:21:1", + "referencedDeclaration": 353, + "src": "7607:21:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", "typeString": "function (bytes32,bytes memory) pure returns (address)" } }, - "id": 356, + "id": 391, "isConstant": false, "isLValue": false, "isPure": false, @@ -13186,27 +14125,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7272:50:1", + "src": "7607:50:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "7255:67:1" + "src": "7590:67:1" }, { "assignments": [ - 359 + 394 ], "declarations": [ { "constant": false, - "id": 359, + "id": 394, "name": "allowance", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7332:17:1", + "scope": 444, + "src": "7667:17:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13214,10 +14153,10 @@ "typeString": "uint256" }, "typeName": { - "id": 358, + "id": 393, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7332:7:1", + "src": "7667:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13227,18 +14166,18 @@ "visibility": "internal" } ], - "id": 369, + "id": 404, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 364, + "id": 399, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7382:4:1", + "referencedDeclaration": 355, + "src": "7717:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13249,14 +14188,14 @@ "arguments": [ { "argumentTypes": null, - "id": 366, + "id": 401, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1374, - "src": "7396:4:1", + "referencedDeclaration": 1409, + "src": "7731:4:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } } @@ -13264,24 +14203,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_Subscription_$675", + "typeIdentifier": "t_contract$_Subscription_$710", "typeString": "contract Subscription" } ], - "id": 365, + "id": 400, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "7388:7:1", + "src": "7723:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 367, + "id": 402, "isConstant": false, "isLValue": false, "isPure": false, @@ -13289,7 +14228,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7388:13:1", + "src": "7723:13:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -13312,12 +14251,12 @@ "arguments": [ { "argumentTypes": null, - "id": 361, + "id": 396, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "7358:12:1", + "referencedDeclaration": 359, + "src": "7693:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13331,18 +14270,18 @@ "typeString": "address" } ], - "id": 360, + "id": 395, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "7352:5:1", + "referencedDeclaration": 1302, + "src": "7687:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 362, + "id": 397, "isConstant": false, "isLValue": false, "isPure": false, @@ -13350,27 +14289,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7352:19:1", + "src": "7687:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 363, + "id": 398, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "allowance", "nodeType": "MemberAccess", - "referencedDeclaration": 941, - "src": "7352:29:1", + "referencedDeclaration": 976, + "src": "7687:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", "typeString": "function (address,address) view external returns (uint256)" } }, - "id": 368, + "id": 403, "isConstant": false, "isLValue": false, "isPure": false, @@ -13378,27 +14317,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7352:50:1", + "src": "7687:50:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "7332:70:1" + "src": "7667:70:1" }, { "assignments": [ - 371 + 406 ], "declarations": [ { "constant": false, - "id": 371, + "id": 406, "name": "balance", "nodeType": "VariableDeclaration", - "scope": 409, - "src": "7412:15:1", + "scope": 444, + "src": "7747:15:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13406,10 +14345,10 @@ "typeString": "uint256" }, "typeName": { - "id": 370, + "id": 405, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7412:7:1", + "src": "7747:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13419,18 +14358,18 @@ "visibility": "internal" } ], - "id": 378, + "id": 413, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 376, + "id": 411, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7460:4:1", + "referencedDeclaration": 355, + "src": "7795:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13449,12 +14388,12 @@ "arguments": [ { "argumentTypes": null, - "id": 373, + "id": 408, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 324, - "src": "7436:12:1", + "referencedDeclaration": 359, + "src": "7771:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13468,18 +14407,18 @@ "typeString": "address" } ], - "id": 372, + "id": 407, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "7430:5:1", + "referencedDeclaration": 1302, + "src": "7765:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 374, + "id": 409, "isConstant": false, "isLValue": false, "isPure": false, @@ -13487,27 +14426,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7430:19:1", + "src": "7765:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 375, + "id": 410, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 925, - "src": "7430:29:1", + "referencedDeclaration": 960, + "src": "7765:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 377, + "id": 412, "isConstant": false, "isLValue": false, "isPure": false, @@ -13515,14 +14454,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7430:35:1", + "src": "7765:35:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "7412:53:1" + "src": "7747:53:1" }, { "expression": { @@ -13534,7 +14473,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 406, + "id": 441, "isConstant": false, "isLValue": false, "isPure": false, @@ -13545,7 +14484,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 399, + "id": 434, "isConstant": false, "isLValue": false, "isPure": false, @@ -13556,7 +14495,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 392, + "id": 427, "isConstant": false, "isLValue": false, "isPure": false, @@ -13567,7 +14506,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 385, + "id": 420, "isConstant": false, "isLValue": false, "isPure": false, @@ -13578,19 +14517,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 381, + "id": 416, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 379, + "id": 414, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 352, - "src": "7497:6:1", + "referencedDeclaration": 387, + "src": "7832:6:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13600,18 +14539,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 380, + "id": 415, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7507:4:1", + "referencedDeclaration": 355, + "src": "7842:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "7497:14:1", + "src": "7832:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13625,19 +14564,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 384, + "id": 419, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 382, + "id": 417, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 320, - "src": "7527:4:1", + "referencedDeclaration": 355, + "src": "7862:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13647,24 +14586,24 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 383, + "id": 418, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 322, - "src": "7535:2:1", + "referencedDeclaration": 357, + "src": "7870:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "7527:10:1", + "src": "7862:10:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:40:1", + "src": "7832:40:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13678,7 +14617,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 391, + "id": 426, "isConstant": false, "isLValue": false, "isPure": false, @@ -13687,18 +14626,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 386, + "id": 421, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1341, - "src": "7553:5:1", + "referencedDeclaration": 1376, + "src": "7888:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 387, + "id": 422, "isConstant": false, "isLValue": false, "isPure": false, @@ -13706,7 +14645,7 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "7553:15:1", + "src": "7888:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13718,26 +14657,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 388, + "id": 423, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "7572:18:1", + "referencedDeclaration": 87, + "src": "7907:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 390, + "id": 425, "indexExpression": { "argumentTypes": null, - "id": 389, + "id": 424, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 340, - "src": "7591:16:1", + "referencedDeclaration": 375, + "src": "7926:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -13748,19 +14687,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7572:36:1", + "src": "7907:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7553:55:1", + "src": "7888:55:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:111:1", + "src": "7832:111:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13774,19 +14713,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 398, + "id": 433, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 393, + "id": 428, "name": "allowance", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 359, - "src": "7624:9:1", + "referencedDeclaration": 394, + "src": "7959:9:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13799,12 +14738,12 @@ "arguments": [ { "argumentTypes": null, - "id": 396, + "id": 431, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "7653:8:1", + "referencedDeclaration": 365, + "src": "7988:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13820,32 +14759,32 @@ ], "expression": { "argumentTypes": null, - "id": 394, + "id": 429, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 326, - "src": "7637:11:1", + "referencedDeclaration": 361, + "src": "7972:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 395, + "id": 430, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "7637:15:1", + "referencedDeclaration": 898, + "src": "7972:15:1", "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": 397, + "id": 432, "isConstant": false, "isLValue": false, "isPure": false, @@ -13853,19 +14792,19 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7637:25:1", + "src": "7972:25:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7624:38:1", + "src": "7959:38:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:165:1", + "src": "7832:165:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13879,19 +14818,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 405, + "id": 440, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 400, + "id": 435, "name": "balance", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 371, - "src": "7678:7:1", + "referencedDeclaration": 406, + "src": "8013:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13904,12 +14843,12 @@ "arguments": [ { "argumentTypes": null, - "id": 403, + "id": 438, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 330, - "src": "7705:8:1", + "referencedDeclaration": 365, + "src": "8040:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13925,32 +14864,32 @@ ], "expression": { "argumentTypes": null, - "id": 401, + "id": 436, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 326, - "src": "7689:11:1", + "referencedDeclaration": 361, + "src": "8024:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 402, + "id": 437, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "7689:15:1", + "referencedDeclaration": 898, + "src": "8024:15:1", "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": 404, + "id": 439, "isConstant": false, "isLValue": false, "isPure": false, @@ -13958,63 +14897,63 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7689:25:1", + "src": "8024:25:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7678:36:1", + "src": "8013:36:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7497:217:1", + "src": "7832:217:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } } ], - "id": 407, + "id": 442, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "7483:241:1", + "src": "7818:241:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 338, - "id": 408, + "functionReturnParameters": 373, + "id": 443, "nodeType": "Return", - "src": "7476:248:1" + "src": "7811:248:1" } ] }, "documentation": null, - "id": 410, + "id": 445, "implemented": true, "kind": "function", "modifiers": [], "name": "isSubscriptionReady", "nodeType": "FunctionDefinition", "parameters": { - "id": 335, + "id": 370, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 320, + "id": 355, "name": "from", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6508:12:1", + "scope": 445, + "src": "6843:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14022,10 +14961,10 @@ "typeString": "address" }, "typeName": { - "id": 319, + "id": 354, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6508:7:1", + "src": "6843:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -14037,11 +14976,11 @@ }, { "constant": false, - "id": 322, + "id": 357, "name": "to", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6547:10:1", + "scope": 445, + "src": "6882:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14049,10 +14988,10 @@ "typeString": "address" }, "typeName": { - "id": 321, + "id": 356, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6547:7:1", + "src": "6882:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -14064,11 +15003,11 @@ }, { "constant": false, - "id": 324, + "id": 359, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6583:20:1", + "scope": 445, + "src": "6918:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14076,10 +15015,10 @@ "typeString": "address" }, "typeName": { - "id": 323, + "id": 358, "name": "address", "nodeType": "ElementaryTypeName", - "src": "6583:7:1", + "src": "6918:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -14091,11 +15030,11 @@ }, { "constant": false, - "id": 326, + "id": 361, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6655:19:1", + "scope": 445, + "src": "6990:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14103,10 +15042,10 @@ "typeString": "uint256" }, "typeName": { - "id": 325, + "id": 360, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6655:7:1", + "src": "6990:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14117,11 +15056,11 @@ }, { "constant": false, - "id": 328, + "id": 363, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6725:21:1", + "scope": 445, + "src": "7060:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14129,10 +15068,10 @@ "typeString": "uint256" }, "typeName": { - "id": 327, + "id": 362, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6725:7:1", + "src": "7060:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14143,11 +15082,11 @@ }, { "constant": false, - "id": 330, + "id": 365, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6797:16:1", + "scope": 445, + "src": "7132:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14155,10 +15094,10 @@ "typeString": "uint256" }, "typeName": { - "id": 329, + "id": 364, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6797:7:1", + "src": "7132:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14169,11 +15108,11 @@ }, { "constant": false, - "id": 332, + "id": 367, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6882:13:1", + "scope": 445, + "src": "7217:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14181,10 +15120,10 @@ "typeString": "uint256" }, "typeName": { - "id": 331, + "id": 366, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "6882:7:1", + "src": "7217:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14195,11 +15134,11 @@ }, { "constant": false, - "id": 334, + "id": 369, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "6964:22:1", + "scope": 445, + "src": "7299:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -14207,10 +15146,10 @@ "typeString": "bytes" }, "typeName": { - "id": 333, + "id": 368, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "6964:5:1", + "src": "7299:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -14220,19 +15159,19 @@ "visibility": "internal" } ], - "src": "6498:544:1" + "src": "6833:544:1" }, "returnParameters": { - "id": 338, + "id": 373, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 337, + "id": 372, "name": "", "nodeType": "VariableDeclaration", - "scope": 410, - "src": "7088:4:1", + "scope": 445, + "src": "7423:4:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14240,10 +15179,10 @@ "typeString": "bool" }, "typeName": { - "id": 336, + "id": 371, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7088:4:1", + "src": "7423:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14253,32 +15192,32 @@ "visibility": "internal" } ], - "src": "7087:6:1" + "src": "7422:6:1" }, - "scope": 675, - "src": "6470:1261:1", + "scope": 710, + "src": "6805:1261:1", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 486, + "id": 521, "nodeType": "Block", - "src": "8606:802:1", + "src": "8941:802:1", "statements": [ { "assignments": [ - 432 + 467 ], "declarations": [ { "constant": false, - "id": 432, + "id": 467, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 486, - "src": "8616:24:1", + "scope": 521, + "src": "8951:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14286,10 +15225,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 431, + "id": 466, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "8616:7:1", + "src": "8951:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -14299,18 +15238,18 @@ "visibility": "internal" } ], - "id": 442, + "id": 477, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 434, + "id": 469, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "8676:4:1", + "referencedDeclaration": 447, + "src": "9011:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14318,12 +15257,12 @@ }, { "argumentTypes": null, - "id": 435, + "id": 470, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 414, - "src": "8682:2:1", + "referencedDeclaration": 449, + "src": "9017:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14331,12 +15270,12 @@ }, { "argumentTypes": null, - "id": 436, + "id": 471, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 416, - "src": "8686:12:1", + "referencedDeclaration": 451, + "src": "9021:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14344,12 +15283,12 @@ }, { "argumentTypes": null, - "id": 437, + "id": 472, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 418, - "src": "8700:11:1", + "referencedDeclaration": 453, + "src": "9035:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14357,12 +15296,12 @@ }, { "argumentTypes": null, - "id": 438, + "id": 473, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 420, - "src": "8713:13:1", + "referencedDeclaration": 455, + "src": "9048:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14370,12 +15309,12 @@ }, { "argumentTypes": null, - "id": 439, + "id": 474, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 422, - "src": "8728:8:1", + "referencedDeclaration": 457, + "src": "9063:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14383,12 +15322,12 @@ }, { "argumentTypes": null, - "id": 440, + "id": 475, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 424, - "src": "8738:5:1", + "referencedDeclaration": 459, + "src": "9073:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14426,18 +15365,18 @@ "typeString": "uint256" } ], - "id": 433, + "id": 468, "name": "getSubscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 301, - "src": "8643:19:1", + "referencedDeclaration": 336, + "src": "8978:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" } }, - "id": 441, + "id": 476, "isConstant": false, "isLValue": false, "isPure": false, @@ -14445,27 +15384,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8643:110:1", + "src": "8978:110:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", - "src": "8616:137:1" + "src": "8951:137:1" }, { "assignments": [ - 444 + 479 ], "declarations": [ { "constant": false, - "id": 444, + "id": 479, "name": "signer", "nodeType": "VariableDeclaration", - "scope": 486, - "src": "8763:14:1", + "scope": 521, + "src": "9098:14:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -14473,10 +15412,10 @@ "typeString": "address" }, "typeName": { - "id": 443, + "id": 478, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8763:7:1", + "src": "9098:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -14487,18 +15426,18 @@ "visibility": "internal" } ], - "id": 449, + "id": 484, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 446, + "id": 481, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 432, - "src": "8802:16:1", + "referencedDeclaration": 467, + "src": "9137:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -14506,12 +15445,12 @@ }, { "argumentTypes": null, - "id": 447, + "id": 482, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 426, - "src": "8820:9:1", + "referencedDeclaration": 461, + "src": "9155:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -14529,18 +15468,18 @@ "typeString": "bytes memory" } ], - "id": 445, + "id": 480, "name": "getSubscriptionSigner", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 318, - "src": "8780:21:1", + "referencedDeclaration": 353, + "src": "9115:21:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", "typeString": "function (bytes32,bytes memory) pure returns (address)" } }, - "id": 448, + "id": 483, "isConstant": false, "isLValue": false, "isPure": false, @@ -14548,14 +15487,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8780:50:1", + "src": "9115:50:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "8763:67:1" + "src": "9098:67:1" }, { "expression": { @@ -14567,19 +15506,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 453, + "id": 488, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 451, + "id": 486, "name": "signer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 444, - "src": "8887:6:1", + "referencedDeclaration": 479, + "src": "9222:6:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14589,18 +15528,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 452, + "id": 487, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "8897:4:1", + "referencedDeclaration": 447, + "src": "9232:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "8887:14:1", + "src": "9222:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14609,14 +15548,14 @@ { "argumentTypes": null, "hexValue": "496e76616c6964205369676e617475726520666f7220737562736372697074696f6e2063616e63656c6c6174696f6e", - "id": 454, + "id": 489, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8903:49:1", + "src": "9238:49:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_20f3baa67ddd296dfb8b9e0ec971696cfd8630a4bebb38617aeef0cee76fac0b", @@ -14636,21 +15575,21 @@ "typeString": "literal_string \"Invalid Signature for subscription cancellation\"" } ], - "id": 450, + "id": 485, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "8879:7:1", + "referencedDeclaration": 1390, + "src": "9214:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 455, + "id": 490, "isConstant": false, "isLValue": false, "isPure": false, @@ -14658,15 +15597,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8879:74:1", + "src": "9214:74:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 456, + "id": 491, "nodeType": "ExpressionStatement", - "src": "8879:74:1" + "src": "9214:74:1" }, { "expression": { @@ -14678,19 +15617,19 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 461, + "id": 496, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 458, + "id": 493, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "9012:4:1", + "referencedDeclaration": 447, + "src": "9347:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14702,18 +15641,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 459, + "id": 494, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "9020:3:1", + "referencedDeclaration": 1386, + "src": "9355:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 460, + "id": 495, "isConstant": false, "isLValue": false, "isPure": false, @@ -14721,13 +15660,13 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9020:10:1", + "src": "9355:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "9012:18:1", + "src": "9347:18:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14736,14 +15675,14 @@ { "argumentTypes": null, "hexValue": "6d73672e73656e646572206973206e6f74207468652073756273637269626572", - "id": 462, + "id": 497, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9032:34:1", + "src": "9367:34:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_b86252a974ff2529f3bb7d6f22659872d492e2e9d678b8652f19cecd6ad9fd79", @@ -14763,21 +15702,21 @@ "typeString": "literal_string \"msg.sender is not the subscriber\"" } ], - "id": 457, + "id": 492, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "9004:7:1", + "referencedDeclaration": 1390, + "src": "9339:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 463, + "id": 498, "isConstant": false, "isLValue": false, "isPure": false, @@ -14785,20 +15724,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9004:63:1", + "src": "9339:63:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 464, + "id": 499, "nodeType": "ExpressionStatement", - "src": "9004:63:1" + "src": "9339:63:1" }, { "expression": { "argumentTypes": null, - "id": 472, + "id": 507, "isConstant": false, "isLValue": false, "isPure": false, @@ -14807,26 +15746,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 465, + "id": 500, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "9206:18:1", + "referencedDeclaration": 87, + "src": "9541:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 467, + "id": 502, "indexExpression": { "argumentTypes": null, - "id": 466, + "id": 501, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 432, - "src": "9225:16:1", + "referencedDeclaration": 467, + "src": "9560:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -14837,7 +15776,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "9206:36:1", + "src": "9541:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14850,7 +15789,7 @@ "arguments": [ { "argumentTypes": null, - "id": 470, + "id": 505, "isConstant": false, "isLValue": false, "isPure": true, @@ -14858,18 +15797,18 @@ "nodeType": "UnaryOperation", "operator": "-", "prefix": true, - "src": "9251:2:1", + "src": "9586:2:1", "subExpression": { "argumentTypes": null, "hexValue": "31", - "id": 469, + "id": 504, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9252:1:1", + "src": "9587:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -14890,20 +15829,20 @@ "typeString": "int_const -1" } ], - "id": 468, + "id": 503, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9243:7:1", + "src": "9578:7:1", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint256" }, - "id": 471, + "id": 506, "isConstant": false, "isLValue": false, "isPure": true, @@ -14911,21 +15850,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9243:11:1", + "src": "9578:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9206:48:1", + "src": "9541:48:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 473, + "id": 508, "nodeType": "ExpressionStatement", - "src": "9206:48:1" + "src": "9541:48:1" }, { "eventCall": { @@ -14933,12 +15872,12 @@ "arguments": [ { "argumentTypes": null, - "id": 475, + "id": 510, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 412, - "src": "9302:4:1", + "referencedDeclaration": 447, + "src": "9637:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14946,12 +15885,12 @@ }, { "argumentTypes": null, - "id": 476, + "id": 511, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 414, - "src": "9308:2:1", + "referencedDeclaration": 449, + "src": "9643:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14959,12 +15898,12 @@ }, { "argumentTypes": null, - "id": 477, + "id": 512, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 416, - "src": "9312:12:1", + "referencedDeclaration": 451, + "src": "9647:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14972,12 +15911,12 @@ }, { "argumentTypes": null, - "id": 478, + "id": 513, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 418, - "src": "9326:11:1", + "referencedDeclaration": 453, + "src": "9661:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14985,12 +15924,12 @@ }, { "argumentTypes": null, - "id": 479, + "id": 514, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 420, - "src": "9339:13:1", + "referencedDeclaration": 455, + "src": "9674:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14998,12 +15937,12 @@ }, { "argumentTypes": null, - "id": 480, + "id": 515, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 422, - "src": "9354:8:1", + "referencedDeclaration": 457, + "src": "9689:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15011,12 +15950,12 @@ }, { "argumentTypes": null, - "id": 481, + "id": 516, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 424, - "src": "9364:5:1", + "referencedDeclaration": 459, + "src": "9699:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15054,18 +15993,18 @@ "typeString": "uint256" } ], - "id": 474, + "id": 509, "name": "CancelSubscription", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 121, - "src": "9270:18:1", + "referencedDeclaration": 123, + "src": "9605:18:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" } }, - "id": 482, + "id": 517, "isConstant": false, "isLValue": false, "isPure": false, @@ -15073,28 +16012,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9270:109:1", + "src": "9605:109:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 483, + "id": 518, "nodeType": "EmitStatement", - "src": "9265:114:1" + "src": "9600:114:1" }, { "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 484, + "id": 519, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "9397:4:1", + "src": "9732:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -15102,31 +16041,31 @@ }, "value": "true" }, - "functionReturnParameters": 430, - "id": 485, + "functionReturnParameters": 465, + "id": 520, "nodeType": "Return", - "src": "9390:11:1" + "src": "9725:11:1" } ] }, "documentation": null, - "id": 487, + "id": 522, "implemented": true, "kind": "function", "modifiers": [], "name": "cancelSubscription", "nodeType": "FunctionDefinition", "parameters": { - "id": 427, + "id": 462, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 412, + "id": 447, "name": "from", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8022:12:1", + "scope": 522, + "src": "8357:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15134,10 +16073,10 @@ "typeString": "address" }, "typeName": { - "id": 411, + "id": 446, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8022:7:1", + "src": "8357:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -15149,11 +16088,11 @@ }, { "constant": false, - "id": 414, + "id": 449, "name": "to", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8061:10:1", + "scope": 522, + "src": "8396:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15161,10 +16100,10 @@ "typeString": "address" }, "typeName": { - "id": 413, + "id": 448, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8061:7:1", + "src": "8396:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -15176,11 +16115,11 @@ }, { "constant": false, - "id": 416, + "id": 451, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8097:20:1", + "scope": 522, + "src": "8432:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15188,10 +16127,10 @@ "typeString": "address" }, "typeName": { - "id": 415, + "id": 450, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8097:7:1", + "src": "8432:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -15203,11 +16142,11 @@ }, { "constant": false, - "id": 418, + "id": 453, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8169:19:1", + "scope": 522, + "src": "8504:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15215,10 +16154,10 @@ "typeString": "uint256" }, "typeName": { - "id": 417, + "id": 452, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8169:7:1", + "src": "8504:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15229,11 +16168,11 @@ }, { "constant": false, - "id": 420, + "id": 455, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8239:21:1", + "scope": 522, + "src": "8574:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15241,10 +16180,10 @@ "typeString": "uint256" }, "typeName": { - "id": 419, + "id": 454, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8239:7:1", + "src": "8574:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15255,11 +16194,11 @@ }, { "constant": false, - "id": 422, + "id": 457, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8311:16:1", + "scope": 522, + "src": "8646:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15267,10 +16206,10 @@ "typeString": "uint256" }, "typeName": { - "id": 421, + "id": 456, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8311:7:1", + "src": "8646:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15281,11 +16220,11 @@ }, { "constant": false, - "id": 424, + "id": 459, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8395:13:1", + "scope": 522, + "src": "8730:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15293,10 +16232,10 @@ "typeString": "uint256" }, "typeName": { - "id": 423, + "id": 458, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8395:7:1", + "src": "8730:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15307,11 +16246,11 @@ }, { "constant": false, - "id": 426, + "id": 461, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8477:22:1", + "scope": 522, + "src": "8812:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -15319,10 +16258,10 @@ "typeString": "bytes" }, "typeName": { - "id": 425, + "id": 460, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "8477:5:1", + "src": "8812:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -15332,19 +16271,19 @@ "visibility": "internal" } ], - "src": "8012:543:1" + "src": "8347:543:1" }, "returnParameters": { - "id": 430, + "id": 465, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 429, + "id": 464, "name": "success", "nodeType": "VariableDeclaration", - "scope": 487, - "src": "8588:12:1", + "scope": 522, + "src": "8923:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15352,10 +16291,10 @@ "typeString": "bool" }, "typeName": { - "id": 428, + "id": 463, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8588:4:1", + "src": "8923:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15365,19 +16304,19 @@ "visibility": "internal" } ], - "src": "8587:14:1" + "src": "8922:14:1" }, - "scope": 675, - "src": "7985:1423:1", + "scope": 710, + "src": "8320:1423:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 636, + "id": 671, "nodeType": "Block", - "src": "10189:2468:1", + "src": "10524:2468:1", "statements": [ { "expression": { @@ -15389,7 +16328,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 512, + "id": 547, "isConstant": false, "isLValue": false, "isPure": false, @@ -15398,18 +16337,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 509, + "id": 544, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "10207:3:1", + "referencedDeclaration": 1386, + "src": "10542:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 510, + "id": 545, "isConstant": false, "isLValue": false, "isPure": false, @@ -15417,7 +16356,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10207:10:1", + "src": "10542:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -15427,18 +16366,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 511, + "id": 546, "name": "relayer", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 71, - "src": "10221:7:1", + "referencedDeclaration": 73, + "src": "10556:7:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "10207:21:1", + "src": "10542:21:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15452,21 +16391,21 @@ "typeString": "bool" } ], - "id": 508, + "id": 543, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1354, - "src": "10199:7:1", + "referencedDeclaration": 1389, + "src": "10534:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, - "id": 513, + "id": 548, "isConstant": false, "isLValue": false, "isPure": false, @@ -15474,28 +16413,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10199:30:1", + "src": "10534:30:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 514, + "id": 549, "nodeType": "ExpressionStatement", - "src": "10199:30:1" + "src": "10534:30:1" }, { "assignments": [ - 516 + 551 ], "declarations": [ { "constant": false, - "id": 516, + "id": 551, "name": "subscriptionHash", "nodeType": "VariableDeclaration", - "scope": 636, - "src": "10239:24:1", + "scope": 671, + "src": "10574:24:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -15503,10 +16442,10 @@ "typeString": "bytes32" }, "typeName": { - "id": 515, + "id": 550, "name": "bytes32", "nodeType": "ElementaryTypeName", - "src": "10239:7:1", + "src": "10574:7:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -15516,18 +16455,18 @@ "visibility": "internal" } ], - "id": 526, + "id": 561, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 518, + "id": 553, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10299:4:1", + "referencedDeclaration": 524, + "src": "10634:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15535,12 +16474,12 @@ }, { "argumentTypes": null, - "id": 519, + "id": 554, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "10305:2:1", + "referencedDeclaration": 526, + "src": "10640:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15548,12 +16487,12 @@ }, { "argumentTypes": null, - "id": 520, + "id": 555, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "10309:12:1", + "referencedDeclaration": 528, + "src": "10644:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15561,12 +16500,12 @@ }, { "argumentTypes": null, - "id": 521, + "id": 556, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "10323:11:1", + "referencedDeclaration": 530, + "src": "10658:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15574,12 +16513,12 @@ }, { "argumentTypes": null, - "id": 522, + "id": 557, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "10336:13:1", + "referencedDeclaration": 532, + "src": "10671:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15587,12 +16526,12 @@ }, { "argumentTypes": null, - "id": 523, + "id": 558, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "10351:8:1", + "referencedDeclaration": 534, + "src": "10686:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15600,12 +16539,12 @@ }, { "argumentTypes": null, - "id": 524, + "id": 559, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10361:5:1", + "referencedDeclaration": 536, + "src": "10696:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15643,18 +16582,18 @@ "typeString": "uint256" } ], - "id": 517, + "id": 552, "name": "getSubscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 301, - "src": "10266:19:1", + "referencedDeclaration": 336, + "src": "10601:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256) view returns (bytes32)" } }, - "id": 525, + "id": 560, "isConstant": false, "isLValue": false, "isPure": false, @@ -15662,14 +16601,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10266:110:1", + "src": "10601:110:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" } }, "nodeType": "VariableDeclarationStatement", - "src": "10239:137:1" + "src": "10574:137:1" }, { "expression": { @@ -15680,12 +16619,12 @@ "arguments": [ { "argumentTypes": null, - "id": 529, + "id": 564, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10473:4:1", + "referencedDeclaration": 524, + "src": "10808:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15693,12 +16632,12 @@ }, { "argumentTypes": null, - "id": 530, + "id": 565, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "10479:2:1", + "referencedDeclaration": 526, + "src": "10814:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15706,12 +16645,12 @@ }, { "argumentTypes": null, - "id": 531, + "id": 566, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "10483:12:1", + "referencedDeclaration": 528, + "src": "10818:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -15719,12 +16658,12 @@ }, { "argumentTypes": null, - "id": 532, + "id": 567, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "10497:11:1", + "referencedDeclaration": 530, + "src": "10832:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15732,12 +16671,12 @@ }, { "argumentTypes": null, - "id": 533, + "id": 568, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "10510:13:1", + "referencedDeclaration": 532, + "src": "10845:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15745,12 +16684,12 @@ }, { "argumentTypes": null, - "id": 534, + "id": 569, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "10525:8:1", + "referencedDeclaration": 534, + "src": "10860:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15758,12 +16697,12 @@ }, { "argumentTypes": null, - "id": 535, + "id": 570, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10535:5:1", + "referencedDeclaration": 536, + "src": "10870:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15771,12 +16710,12 @@ }, { "argumentTypes": null, - "id": 536, + "id": 571, "name": "signature", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 503, - "src": "10542:9:1", + "referencedDeclaration": 538, + "src": "10877:9:1", "typeDescriptions": { "typeIdentifier": "t_bytes_memory_ptr", "typeString": "bytes memory" @@ -15818,18 +16757,18 @@ "typeString": "bytes memory" } ], - "id": 528, + "id": 563, "name": "isSubscriptionReady", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 410, - "src": "10453:19:1", + "referencedDeclaration": 445, + "src": "10788:19:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256,bytes memory) view returns (bool)" } }, - "id": 537, + "id": 572, "isConstant": false, "isLValue": false, "isPure": false, @@ -15837,7 +16776,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:99:1", + "src": "10788:99:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -15846,14 +16785,14 @@ { "argumentTypes": null, "hexValue": "537562736372697074696f6e206973206e6f74207265616479206f7220636f6e646974696f6e73206f66207472616e736374696f6e20617265206e6f74206d6574", - "id": 538, + "id": 573, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10554:67:1", + "src": "10889:67:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_af71f06446e1befab38ec272e173aae8220ce6336c1755fee67e531c43ea91d3", @@ -15873,21 +16812,21 @@ "typeString": "literal_string \"Subscription is not ready or conditions of transction are not met\"" } ], - "id": 527, + "id": 562, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "10444:7:1", + "referencedDeclaration": 1390, + "src": "10779:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 539, + "id": 574, "isConstant": false, "isLValue": false, "isPure": false, @@ -15895,20 +16834,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10444:179:1", + "src": "10779:179:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 540, + "id": 575, "nodeType": "ExpressionStatement", - "src": "10444:179:1" + "src": "10779:179:1" }, { "expression": { "argumentTypes": null, - "id": 549, + "id": 584, "isConstant": false, "isLValue": false, "isPure": false, @@ -15917,26 +16856,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 541, + "id": 576, "name": "nextValidTimestamp", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "10713:18:1", + "referencedDeclaration": 87, + "src": "11048:18:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", "typeString": "mapping(bytes32 => uint256)" } }, - "id": 543, + "id": 578, "indexExpression": { "argumentTypes": null, - "id": 542, + "id": 577, "name": "subscriptionHash", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 516, - "src": "10732:16:1", + "referencedDeclaration": 551, + "src": "11067:16:1", "typeDescriptions": { "typeIdentifier": "t_bytes32", "typeString": "bytes32" @@ -15947,7 +16886,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "10713:36:1", + "src": "11048:36:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15960,12 +16899,12 @@ "arguments": [ { "argumentTypes": null, - "id": 547, + "id": 582, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "10772:13:1", + "referencedDeclaration": 532, + "src": "11107:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -15983,18 +16922,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 544, + "id": 579, "name": "block", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1341, - "src": "10752:5:1", + "referencedDeclaration": 1376, + "src": "11087:5:1", "typeDescriptions": { "typeIdentifier": "t_magic_block", "typeString": "block" } }, - "id": 545, + "id": 580, "isConstant": false, "isLValue": false, "isPure": false, @@ -16002,27 +16941,27 @@ "memberName": "timestamp", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10752:15:1", + "src": "11087:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 546, + "id": 581, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 863, - "src": "10752:19:1", + "referencedDeclaration": 898, + "src": "11087:19:1", "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": 548, + "id": 583, "isConstant": false, "isLValue": false, "isPure": false, @@ -16030,21 +16969,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10752:34:1", + "src": "11087:34:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10713:73:1", + "src": "11048:73:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 550, + "id": 585, "nodeType": "ExpressionStatement", - "src": "10713:73:1" + "src": "11048:73:1" }, { "condition": { @@ -16053,19 +16992,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 555, + "id": 590, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 551, + "id": 586, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10905:5:1", + "referencedDeclaration": 536, + "src": "11240:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16077,26 +17016,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 552, + "id": 587, "name": "extraNonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "10913:10:1", + "referencedDeclaration": 91, + "src": "11248:10:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" } }, - "id": 554, + "id": 589, "indexExpression": { "argumentTypes": null, - "id": 553, + "id": 588, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10924:4:1", + "referencedDeclaration": 524, + "src": "11259:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16107,31 +17046,31 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10913:16:1", + "src": "11248:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10905:24:1", + "src": "11240:24:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 563, + "id": 598, "nodeType": "IfStatement", - "src": "10902:75:1", + "src": "11237:75:1", "trueBody": { - "id": 562, + "id": 597, "nodeType": "Block", - "src": "10930:47:1", + "src": "11265:47:1", "statements": [ { "expression": { "argumentTypes": null, - "id": 560, + "id": 595, "isConstant": false, "isLValue": false, "isPure": false, @@ -16140,26 +17079,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 556, + "id": 591, "name": "extraNonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 89, - "src": "10942:10:1", + "referencedDeclaration": 91, + "src": "11277:10:1", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" } }, - "id": 558, + "id": 593, "indexExpression": { "argumentTypes": null, - "id": 557, + "id": 592, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "10953:4:1", + "referencedDeclaration": 524, + "src": "11288:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16170,7 +17109,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "10942:16:1", + "src": "11277:16:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16180,42 +17119,42 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 559, + "id": 594, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "10961:5:1", + "referencedDeclaration": 536, + "src": "11296:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10942:24:1", + "src": "11277:24:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 561, + "id": 596, "nodeType": "ExpressionStatement", - "src": "10942:24:1" + "src": "11277:24:1" } ] } }, { "assignments": [ - 565 + 600 ], "declarations": [ { "constant": false, - "id": 565, + "id": 600, "name": "startingBalance", "nodeType": "VariableDeclaration", - "scope": 636, - "src": "11062:23:1", + "scope": 671, + "src": "11397:23:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -16223,10 +17162,10 @@ "typeString": "uint256" }, "typeName": { - "id": 564, + "id": 599, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "11062:7:1", + "src": "11397:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16236,18 +17175,18 @@ "visibility": "internal" } ], - "id": 572, + "id": 607, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 570, + "id": 605, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11118:2:1", + "referencedDeclaration": 526, + "src": "11453:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16266,12 +17205,12 @@ "arguments": [ { "argumentTypes": null, - "id": 567, + "id": 602, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11094:12:1", + "referencedDeclaration": 528, + "src": "11429:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16285,18 +17224,18 @@ "typeString": "address" } ], - "id": 566, + "id": 601, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "11088:5:1", + "referencedDeclaration": 1302, + "src": "11423:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 568, + "id": 603, "isConstant": false, "isLValue": false, "isPure": false, @@ -16304,27 +17243,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11088:19:1", + "src": "11423:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 569, + "id": 604, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 925, - "src": "11088:29:1", + "referencedDeclaration": 960, + "src": "11423:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 571, + "id": 606, "isConstant": false, "isLValue": false, "isPure": false, @@ -16332,14 +17271,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11088:33:1", + "src": "11423:33:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "11062:59:1" + "src": "11397:59:1" }, { "expression": { @@ -16347,12 +17286,12 @@ "arguments": [ { "argumentTypes": null, - "id": 577, + "id": 612, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "11164:4:1", + "referencedDeclaration": 524, + "src": "11499:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16360,12 +17299,12 @@ }, { "argumentTypes": null, - "id": 578, + "id": 613, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11169:2:1", + "referencedDeclaration": 526, + "src": "11504:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16373,12 +17312,12 @@ }, { "argumentTypes": null, - "id": 579, + "id": 614, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "11172:11:1", + "referencedDeclaration": 530, + "src": "11507:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16405,12 +17344,12 @@ "arguments": [ { "argumentTypes": null, - "id": 574, + "id": 609, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11137:12:1", + "referencedDeclaration": 528, + "src": "11472:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16424,18 +17363,18 @@ "typeString": "address" } ], - "id": 573, + "id": 608, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "11131:5:1", + "referencedDeclaration": 1302, + "src": "11466:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 575, + "id": 610, "isConstant": false, "isLValue": false, "isPure": false, @@ -16443,27 +17382,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11131:19:1", + "src": "11466:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 576, + "id": 611, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transferFrom", "nodeType": "MemberAccess", - "referencedDeclaration": 1014, - "src": "11131:32:1", + "referencedDeclaration": 1049, + "src": "11466:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)" } }, - "id": 580, + "id": 615, "isConstant": false, "isLValue": false, "isPure": false, @@ -16471,15 +17410,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11131:53:1", + "src": "11466:53:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 581, + "id": 616, "nodeType": "ExpressionStatement", - "src": "11131:53:1" + "src": "11466:53:1" }, { "expression": { @@ -16491,7 +17430,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 593, + "id": 628, "isConstant": false, "isLValue": false, "isPure": false, @@ -16505,19 +17444,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 585, + "id": 620, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 583, + "id": 618, "name": "startingBalance", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 565, - "src": "11214:15:1", + "referencedDeclaration": 600, + "src": "11549:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16527,32 +17466,32 @@ "operator": "+", "rightExpression": { "argumentTypes": null, - "id": 584, + "id": 619, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "11230:11:1", + "referencedDeclaration": 530, + "src": "11565:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11214:27:1", + "src": "11549:27:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } } ], - "id": 586, + "id": 621, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", - "src": "11213:29:1", + "src": "11548:29:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16565,12 +17504,12 @@ "arguments": [ { "argumentTypes": null, - "id": 591, + "id": 626, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11276:2:1", + "referencedDeclaration": 526, + "src": "11611:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16589,12 +17528,12 @@ "arguments": [ { "argumentTypes": null, - "id": 588, + "id": 623, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11252:12:1", + "referencedDeclaration": 528, + "src": "11587:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16608,18 +17547,18 @@ "typeString": "address" } ], - "id": 587, + "id": 622, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "11246:5:1", + "referencedDeclaration": 1302, + "src": "11581:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 589, + "id": 624, "isConstant": false, "isLValue": false, "isPure": false, @@ -16627,27 +17566,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11246:19:1", + "src": "11581:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 590, + "id": 625, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "balanceOf", "nodeType": "MemberAccess", - "referencedDeclaration": 925, - "src": "11246:29:1", + "referencedDeclaration": 960, + "src": "11581:29:1", "typeDescriptions": { "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", "typeString": "function (address) view external returns (uint256)" } }, - "id": 592, + "id": 627, "isConstant": false, "isLValue": false, "isPure": false, @@ -16655,13 +17594,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11246:33:1", + "src": "11581:33:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11213:66:1", + "src": "11548:66:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16670,14 +17609,14 @@ { "argumentTypes": null, "hexValue": "45524332302042616c616e636520646964206e6f74206368616e676520636f72726563746c79", - "id": 594, + "id": 629, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "11291:40:1", + "src": "11626:40:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ded71a89e8fc5dbd375e97b6164c08c2ea5d981bb8fdce6588c0434f53d059b7", @@ -16697,21 +17636,21 @@ "typeString": "literal_string \"ERC20 Balance did not change correctly\"" } ], - "id": 582, + "id": 617, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "11194:7:1", + "referencedDeclaration": 1390, + "src": "11529:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 595, + "id": 630, "isConstant": false, "isLValue": false, "isPure": false, @@ -16719,15 +17658,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11194:147:1", + "src": "11529:147:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 596, + "id": 631, "nodeType": "ExpressionStatement", - "src": "11194:147:1" + "src": "11529:147:1" }, { "expression": { @@ -16738,18 +17677,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 598, + "id": 633, "name": "checkSuccess", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 652, - "src": "11371:12:1", + "referencedDeclaration": 687, + "src": "11706:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", "typeString": "function () pure returns (bool)" } }, - "id": 599, + "id": 634, "isConstant": false, "isLValue": false, "isPure": false, @@ -16757,7 +17696,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11371:14:1", + "src": "11706:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -16766,14 +17705,14 @@ { "argumentTypes": null, "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e205472616e7366657246726f6d206661696c6564", - "id": 600, + "id": 635, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "11397:55:1", + "src": "11732:55:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_22fda53c4160a201b6c6b94643fa6d7525aa15a7f4ec1af5c52f0db455252a28", @@ -16793,21 +17732,21 @@ "typeString": "literal_string \"Subscription::executeSubscription TransferFrom failed\"" } ], - "id": 597, + "id": 632, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "11352:7:1", + "referencedDeclaration": 1390, + "src": "11687:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 601, + "id": 636, "isConstant": false, "isLValue": false, "isPure": false, @@ -16815,15 +17754,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11352:112:1", + "src": "11687:112:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 602, + "id": 637, "nodeType": "ExpressionStatement", - "src": "11352:112:1" + "src": "11687:112:1" }, { "eventCall": { @@ -16831,12 +17770,12 @@ "arguments": [ { "argumentTypes": null, - "id": 604, + "id": 639, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "11514:4:1", + "referencedDeclaration": 524, + "src": "11849:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16844,12 +17783,12 @@ }, { "argumentTypes": null, - "id": 605, + "id": 640, "name": "to", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 491, - "src": "11520:2:1", + "referencedDeclaration": 526, + "src": "11855:2:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16857,12 +17796,12 @@ }, { "argumentTypes": null, - "id": 606, + "id": 641, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "11524:12:1", + "referencedDeclaration": 528, + "src": "11859:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -16870,12 +17809,12 @@ }, { "argumentTypes": null, - "id": 607, + "id": 642, "name": "tokenAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 495, - "src": "11538:11:1", + "referencedDeclaration": 530, + "src": "11873:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16883,12 +17822,12 @@ }, { "argumentTypes": null, - "id": 608, + "id": 643, "name": "periodSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 497, - "src": "11551:13:1", + "referencedDeclaration": 532, + "src": "11886:13:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16896,12 +17835,12 @@ }, { "argumentTypes": null, - "id": 609, + "id": 644, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "11566:8:1", + "referencedDeclaration": 534, + "src": "11901:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16909,12 +17848,12 @@ }, { "argumentTypes": null, - "id": 610, + "id": 645, "name": "nonce", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 501, - "src": "11576:5:1", + "referencedDeclaration": 536, + "src": "11911:5:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -16952,18 +17891,18 @@ "typeString": "uint256" } ], - "id": 603, + "id": 638, "name": "ExecuteSubscription", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 105, - "src": "11481:19:1", + "referencedDeclaration": 107, + "src": "11816:19:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (address,address,address,uint256,uint256,uint256,uint256)" } }, - "id": 611, + "id": 646, "isConstant": false, "isLValue": false, "isPure": false, @@ -16971,15 +17910,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11481:110:1", + "src": "11816:110:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 612, + "id": 647, "nodeType": "EmitStatement", - "src": "11476:115:1" + "src": "11811:115:1" }, { "condition": { @@ -16988,19 +17927,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 615, + "id": 650, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 613, + "id": 648, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "11811:8:1", + "referencedDeclaration": 534, + "src": "12146:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17011,14 +17950,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 614, + "id": 649, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11822:1:1", + "src": "12157:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -17026,20 +17965,20 @@ }, "value": "0" }, - "src": "11811:12:1", + "src": "12146:12:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 633, + "id": 668, "nodeType": "IfStatement", - "src": "11807:822:1", + "src": "12142:822:1", "trueBody": { - "id": 632, + "id": 667, "nodeType": "Block", - "src": "11825:804:1", + "src": "12160:804:1", "statements": [ { "expression": { @@ -17047,12 +17986,12 @@ "arguments": [ { "argumentTypes": null, - "id": 620, + "id": 655, "name": "from", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 489, - "src": "12437:4:1", + "referencedDeclaration": 524, + "src": "12772:4:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17062,18 +18001,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 621, + "id": 656, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "12443:3:1", + "referencedDeclaration": 1386, + "src": "12778:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 622, + "id": 657, "isConstant": false, "isLValue": false, "isPure": false, @@ -17081,7 +18020,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12443:10:1", + "src": "12778:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -17089,12 +18028,12 @@ }, { "argumentTypes": null, - "id": 623, + "id": 658, "name": "gasPrice", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 499, - "src": "12455:8:1", + "referencedDeclaration": 534, + "src": "12790:8:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17121,12 +18060,12 @@ "arguments": [ { "argumentTypes": null, - "id": 617, + "id": 652, "name": "tokenAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 493, - "src": "12410:12:1", + "referencedDeclaration": 528, + "src": "12745:12:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -17140,18 +18079,18 @@ "typeString": "address" } ], - "id": 616, + "id": 651, "name": "ERC20", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1267, - "src": "12404:5:1", + "referencedDeclaration": 1302, + "src": "12739:5:1", "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20_$1267_$", + "typeIdentifier": "t_type$_t_contract$_ERC20_$1302_$", "typeString": "type(contract ERC20)" } }, - "id": 618, + "id": 653, "isConstant": false, "isLValue": false, "isPure": false, @@ -17159,27 +18098,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12404:19:1", + "src": "12739:19:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20_$1267", + "typeIdentifier": "t_contract$_ERC20_$1302", "typeString": "contract ERC20" } }, - "id": 619, + "id": 654, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "transferFrom", "nodeType": "MemberAccess", - "referencedDeclaration": 1014, - "src": "12404:32:1", + "referencedDeclaration": 1049, + "src": "12739:32:1", "typeDescriptions": { "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", "typeString": "function (address,address,uint256) external returns (bool)" } }, - "id": 624, + "id": 659, "isConstant": false, "isLValue": false, "isPure": false, @@ -17187,15 +18126,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12404:60:1", + "src": "12739:60:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 625, + "id": 660, "nodeType": "ExpressionStatement", - "src": "12404:60:1" + "src": "12739:60:1" }, { "expression": { @@ -17206,18 +18145,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 627, + "id": 662, "name": "checkSuccess", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 652, - "src": "12503:12:1", + "referencedDeclaration": 687, + "src": "12838:12:1", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$__$returns$_t_bool_$", "typeString": "function () pure returns (bool)" } }, - "id": 628, + "id": 663, "isConstant": false, "isLValue": false, "isPure": false, @@ -17225,7 +18164,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12503:14:1", + "src": "12838:14:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17234,14 +18173,14 @@ { "argumentTypes": null, "hexValue": "537562736372697074696f6e3a3a65786563757465537562736372697074696f6e204661696c656420746f20706179206761732061732066726f6d206163636f756e74", - "id": 629, + "id": 664, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12535:69:1", + "src": "12870:69:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_91dfd8b130e56d88b0bb875283dbd7a93ad5846177fd31c98ad56f2a5bd9d2f7", @@ -17261,21 +18200,21 @@ "typeString": "literal_string \"Subscription::executeSubscription Failed to pay gas as from account\"" } ], - "id": 626, + "id": 661, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1355, - "src": "12478:7:1", + "referencedDeclaration": 1390, + "src": "12813:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 630, + "id": 665, "isConstant": false, "isLValue": false, "isPure": false, @@ -17283,15 +18222,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12478:140:1", + "src": "12813:140:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 631, + "id": 666, "nodeType": "ExpressionStatement", - "src": "12478:140:1" + "src": "12813:140:1" } ] } @@ -17300,14 +18239,14 @@ "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 634, + "id": 669, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "12646:4:1", + "src": "12981:4:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -17315,31 +18254,31 @@ }, "value": "true" }, - "functionReturnParameters": 507, - "id": 635, + "functionReturnParameters": 542, + "id": 670, "nodeType": "Return", - "src": "12639:11:1" + "src": "12974:11:1" } ] }, "documentation": null, - "id": 637, + "id": 672, "implemented": true, "kind": "function", "modifiers": [], "name": "executeSubscription", "nodeType": "FunctionDefinition", "parameters": { - "id": 504, + "id": 539, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 489, + "id": 524, "name": "from", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9604:12:1", + "scope": 672, + "src": "9939:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17347,10 +18286,10 @@ "typeString": "address" }, "typeName": { - "id": 488, + "id": 523, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9604:7:1", + "src": "9939:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -17362,11 +18301,11 @@ }, { "constant": false, - "id": 491, + "id": 526, "name": "to", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9643:10:1", + "scope": 672, + "src": "9978:10:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17374,10 +18313,10 @@ "typeString": "address" }, "typeName": { - "id": 490, + "id": 525, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9643:7:1", + "src": "9978:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -17389,11 +18328,11 @@ }, { "constant": false, - "id": 493, + "id": 528, "name": "tokenAddress", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9679:20:1", + "scope": 672, + "src": "10014:20:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17401,10 +18340,10 @@ "typeString": "address" }, "typeName": { - "id": 492, + "id": 527, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9679:7:1", + "src": "10014:7:1", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -17416,11 +18355,11 @@ }, { "constant": false, - "id": 495, + "id": 530, "name": "tokenAmount", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9751:19:1", + "scope": 672, + "src": "10086:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17428,10 +18367,10 @@ "typeString": "uint256" }, "typeName": { - "id": 494, + "id": 529, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9751:7:1", + "src": "10086:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17442,11 +18381,11 @@ }, { "constant": false, - "id": 497, + "id": 532, "name": "periodSeconds", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9821:21:1", + "scope": 672, + "src": "10156:21:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17454,10 +18393,10 @@ "typeString": "uint256" }, "typeName": { - "id": 496, + "id": 531, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9821:7:1", + "src": "10156:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17468,11 +18407,11 @@ }, { "constant": false, - "id": 499, + "id": 534, "name": "gasPrice", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9893:16:1", + "scope": 672, + "src": "10228:16:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17480,10 +18419,10 @@ "typeString": "uint256" }, "typeName": { - "id": 498, + "id": 533, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9893:7:1", + "src": "10228:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17494,11 +18433,11 @@ }, { "constant": false, - "id": 501, + "id": 536, "name": "nonce", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "9977:13:1", + "scope": 672, + "src": "10312:13:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17506,10 +18445,10 @@ "typeString": "uint256" }, "typeName": { - "id": 500, + "id": 535, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9977:7:1", + "src": "10312:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17520,11 +18459,11 @@ }, { "constant": false, - "id": 503, + "id": 538, "name": "signature", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "10060:22:1", + "scope": 672, + "src": "10395:22:1", "stateVariable": false, "storageLocation": "memory", "typeDescriptions": { @@ -17532,10 +18471,10 @@ "typeString": "bytes" }, "typeName": { - "id": 502, + "id": 537, "name": "bytes", "nodeType": "ElementaryTypeName", - "src": "10060:5:1", + "src": "10395:5:1", "typeDescriptions": { "typeIdentifier": "t_bytes_storage_ptr", "typeString": "bytes" @@ -17545,19 +18484,19 @@ "visibility": "internal" } ], - "src": "9594:544:1" + "src": "9929:544:1" }, "returnParameters": { - "id": 507, + "id": 542, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 506, + "id": 541, "name": "success", "nodeType": "VariableDeclaration", - "scope": 637, - "src": "10171:12:1", + "scope": 672, + "src": "10506:12:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17565,10 +18504,10 @@ "typeString": "bool" }, "typeName": { - "id": 505, + "id": 540, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "10171:4:1", + "src": "10506:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17578,32 +18517,32 @@ "visibility": "internal" } ], - "src": "10170:14:1" + "src": "10505:14:1" }, - "scope": 675, - "src": "9566:3091:1", + "scope": 710, + "src": "9901:3091:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 651, + "id": 686, "nodeType": "Block", - "src": "13157:770:1", + "src": "13492:770:1", "statements": [ { "assignments": [ - 643 + 678 ], "declarations": [ { "constant": false, - "id": 643, + "id": 678, "name": "returnValue", "nodeType": "VariableDeclaration", - "scope": 651, - "src": "13167:19:1", + "scope": 686, + "src": "13502:19:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17611,10 +18550,10 @@ "typeString": "uint256" }, "typeName": { - "id": 642, + "id": 677, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "13167:7:1", + "src": "13502:7:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17624,18 +18563,18 @@ "visibility": "internal" } ], - "id": 645, + "id": 680, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 644, + "id": 679, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "13189:1:1", + "src": "13524:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -17644,33 +18583,33 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "13167:23:1" + "src": "13502:23:1" }, { "externalReferences": [ { "returnValue": { - "declaration": 643, + "declaration": 678, "isOffset": false, "isSlot": false, - "src": "13472:11:1", + "src": "13807:11:1", "valueSize": 1 } }, { "returnValue": { - "declaration": 643, + "declaration": 678, "isOffset": false, "isSlot": false, - "src": "13749:11:1", + "src": "14084:11:1", "valueSize": 1 } } ], - "id": 646, + "id": 681, "nodeType": "InlineAssembly", "operations": "{\n switch returndatasize()\n case 0x0 {\n returnValue := 1\n }\n case 0x20 {\n returndatacopy(0x0, 0x0, 0x20)\n returnValue := mload(0x0)\n }\n default {\n }\n}", - "src": "13268:635:1" + "src": "13603:635:1" }, { "expression": { @@ -17679,19 +18618,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 649, + "id": 684, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 647, + "id": 682, "name": "returnValue", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 643, - "src": "13904:11:1", + "referencedDeclaration": 678, + "src": "14239:11:1", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -17702,14 +18641,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 648, + "id": 683, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "13919:1:1", + "src": "14254:1:1", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -17717,43 +18656,43 @@ }, "value": "0" }, - "src": "13904:16:1", + "src": "14239:16:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 641, - "id": 650, + "functionReturnParameters": 676, + "id": 685, "nodeType": "Return", - "src": "13897:23:1" + "src": "14232:23:1" } ] }, "documentation": "Checks the return value of the previous function. Returns true if the previous function\nfunction returned 32 non-zero bytes or returned zero bytes.", - "id": 652, + "id": 687, "implemented": true, "kind": "function", "modifiers": [], "name": "checkSuccess", "nodeType": "FunctionDefinition", "parameters": { - "id": 638, + "id": 673, "nodeType": "ParameterList", "parameters": [], - "src": "13093:7:1" + "src": "13428:7:1" }, "returnParameters": { - "id": 641, + "id": 676, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 640, + "id": 675, "name": "", "nodeType": "VariableDeclaration", - "scope": 652, - "src": "13147:4:1", + "scope": 687, + "src": "13482:4:1", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -17761,10 +18700,10 @@ "typeString": "bool" }, "typeName": { - "id": 639, + "id": 674, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "13147:4:1", + "src": "13482:4:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17774,19 +18713,19 @@ "visibility": "internal" } ], - "src": "13146:6:1" + "src": "13481:6:1" }, - "scope": 675, - "src": "13072:855:1", + "scope": 710, + "src": "13407:855:1", "stateMutability": "pure", "superFunction": null, "visibility": "private" }, { "body": { - "id": 666, + "id": 701, "nodeType": "Block", - "src": "14101:70:1", + "src": "14436:68:1", "statements": [ { "expression": { @@ -17798,7 +18737,7 @@ "typeIdentifier": "t_address_payable", "typeString": "address payable" }, - "id": 659, + "id": 694, "isConstant": false, "isLValue": false, "isPure": false, @@ -17807,18 +18746,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 656, + "id": 691, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1351, - "src": "14117:3:1", + "referencedDeclaration": 1386, + "src": "14452:3:1", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 657, + "id": 692, "isConstant": false, "isLValue": false, "isPure": false, @@ -17826,7 +18765,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "14117:10:1", + "src": "14452:10:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -17836,18 +18775,18 @@ "operator": "==", "rightExpression": { "argumentTypes": null, - "id": 658, - "name": "author", + "id": 693, + "name": "owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 69, - "src": "14129:6:1", + "src": "14464:5:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" } }, - "src": "14117:18:1", + "src": "14452:17:1", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -17861,21 +18800,21 @@ "typeString": "bool" } ], - "id": 655, + "id": 690, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1354, - 1355 + 1389, + 1390 ], - "referencedDeclaration": 1354, - "src": "14109:7:1", + "referencedDeclaration": 1389, + "src": "14444:7:1", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", "typeString": "function (bool) pure" } }, - "id": 660, + "id": 695, "isConstant": false, "isLValue": false, "isPure": false, @@ -17883,15 +18822,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14109:27:1", + "src": "14444:26:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 661, + "id": 696, "nodeType": "ExpressionStatement", - "src": "14109:27:1" + "src": "14444:26:1" }, { "expression": { @@ -17899,12 +18838,12 @@ "arguments": [ { "argumentTypes": null, - "id": 663, - "name": "author", + "id": 698, + "name": "owner", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 69, - "src": "14157:6:1", + "src": "14491:5:1", "typeDescriptions": { "typeIdentifier": "t_address_payable", "typeString": "address payable" @@ -17918,18 +18857,18 @@ "typeString": "address payable" } ], - "id": 662, + "id": 697, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1359, - "src": "14144:12:1", + "referencedDeclaration": 1394, + "src": "14478:12:1", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$", "typeString": "function (address payable)" } }, - "id": 664, + "id": 699, "isConstant": false, "isLValue": false, "isPure": false, @@ -17937,48 +18876,48 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14144:20:1", + "src": "14478:19:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 665, + "id": 700, "nodeType": "ExpressionStatement", - "src": "14144:20:1" + "src": "14478:19:1" } ] }, "documentation": null, - "id": 667, + "id": 702, "implemented": true, "kind": "function", "modifiers": [], "name": "endContract", "nodeType": "FunctionDefinition", "parameters": { - "id": 653, + "id": 688, "nodeType": "ParameterList", "parameters": [], - "src": "14077:2:1" + "src": "14412:2:1" }, "returnParameters": { - "id": 654, + "id": 689, "nodeType": "ParameterList", "parameters": [], - "src": "14101:0:1" + "src": "14436:0:1" }, - "scope": 675, - "src": "14057:114:1", + "scope": 710, + "src": "14392:112:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "external" }, { "body": { - "id": 673, + "id": 708, "nodeType": "Block", - "src": "14277:25:1", + "src": "14610:25:1", "statements": [ { "expression": { @@ -17986,21 +18925,21 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 670, + "id": 705, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1356, - 1357 + 1391, + 1392 ], - "referencedDeclaration": 1356, - "src": "14286:6:1", + "referencedDeclaration": 1391, + "src": "14619:6:1", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$__$returns$__$", "typeString": "function () pure" } }, - "id": 671, + "id": 706, "isConstant": false, "isLValue": false, "isPure": false, @@ -18008,49 +18947,49 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "14286:9:1", + "src": "14619:9:1", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 672, + "id": 707, "nodeType": "ExpressionStatement", - "src": "14286:9:1" + "src": "14619:9:1" } ] }, "documentation": null, - "id": 674, + "id": 709, "implemented": true, "kind": "fallback", "modifiers": [], "name": "", "nodeType": "FunctionDefinition", "parameters": { - "id": 668, + "id": 703, "nodeType": "ParameterList", "parameters": [], - "src": "14257:2:1" + "src": "14590:2:1" }, "returnParameters": { - "id": 669, + "id": 704, "nodeType": "ParameterList", "parameters": [], - "src": "14277:0:1" + "src": "14610:0:1" }, - "scope": 675, - "src": "14248:54:1", + "scope": 710, + "src": "14581:54:1", "stateMutability": "payable", "superFunction": null, "visibility": "external" } ], - "scope": 676, - "src": "1091:13213:1" + "scope": 711, + "src": "1091:13546:1" } ], - "src": "0:14305:1" + "src": "0:14638:1" }, "compiler": { "name": "solc", @@ -18058,11 +18997,11 @@ }, "networks": {}, "schemaVersion": "3.0.6", - "updatedAt": "2019-05-12T15:53:10.470Z", + "updatedAt": "2019-05-22T12:57:22.984Z", "devdoc": { "methods": {} }, "userdoc": { "methods": {} } -} +} \ No newline at end of file From d66e640dcc5992ea65ed71adafe4cc9d1fbcc8a9 Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 22:55:53 +0900 Subject: [PATCH 10/13] remove some console logs --- app/assets/v2/js/grants/fund.js | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 33419a292fd..ae845339597 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -134,11 +134,9 @@ $(document).ready(function() { if (data.token_address != '0x0000000000000000000000000000000000000000') { selected_token = data.token_address; deployedToken = new web3.eth.Contract(compiledToken.abi, data.token_address); - console.log('data.token_address is set, skipping denomination ' + data.token_address); } else { selected_token = data.denomination; deployedToken = new web3.eth.Contract(compiledToken.abi, data.denomination); - console.log('data.token_address is 0x0, denomination is ' + selected_token); $('#token_symbol').val($('#js-token option:selected').text()); $('#token_address').val(selected_token); data.token_address = selected_token; @@ -150,7 +148,6 @@ $(document).ready(function() { } tokenAddress = data.token_address; - console.log('tokenAddress: ' + tokenAddress); deployedToken.methods.decimals().call(function(err, decimals) { if (err) { @@ -163,14 +160,9 @@ $(document).ready(function() { if (data.contract_version == 0) { // version 0 of the contract has no fee - console.log('feeless'); realApproval = Number((grant_amount * data.num_periods * Math.pow(10, decimals)) + 1); } else if (data.contract_version == 1) { - console.log('feefull'); - console.log('gitcoin amt:' + gitcoin_grant_amount); - console.log('grant amt:' + grant_amount); realApproval = Number(((grant_amount + gitcoin_grant_amount) * data.num_periods * Math.pow(10, decimals)) + 1); - console.log('realApproval: ' + realApproval); } let realGasPrice = Number(gitcoin_grant_amount * Math.pow(10, decimals)); // optional grants fee @@ -287,7 +279,7 @@ const subscribeToGrant = (transactionHash) => { $('#transaction_url').attr('href', linkURL); enableWaitState('#grants_form'); // TODO: fix the tweet modal - $('#tweetModal').modal('show'); + // $('#tweetModal').modal('show'); deployedSubscription.methods.extraNonce(accounts[0]).call(function(err, nonce) { @@ -303,10 +295,6 @@ const subscribeToGrant = (transactionHash) => { web3.utils.toTwosComplement(nonce) ]; - console.log('correct grant amount is: ' + web3.utils.toTwosComplement(Number(grant_amount * Math.pow(10, decimals)).toLocaleString('fullwide', {useGrouping: false}))); - console.log('current grant amount is: ' + parts[3]); - console.log(parts); - processSubscriptionHash(parts); }); }); @@ -341,7 +329,6 @@ const processSubscriptionHash = (parts) => { }; const saveSubscription = (data, isOneTimePayment) => { - console.log(data); if (isOneTimePayment) { data['real_period_seconds'] = 0; } @@ -350,7 +337,6 @@ const saveSubscription = (data, isOneTimePayment) => { url: '', data: data, success: json => { - console.log(json); console.log('successfully saved subscription'); if (json.url != undefined) { redirectURL = json.url; @@ -373,18 +359,11 @@ const splitPayment = (account, toFirst, toSecond, valueFirst, valueSecond) => { data[this.name] = this.value; }); saveSubscription(data, true); - // TODO: deploy production splitter and change address on network + let deployedSplitter = new web3.eth.Contract(compiledSplitter.abiDefinition, splitterAddress); let token_address = $('#js-token').length ? $('#js-token').val() : $('#sub_token_address').val(); - console.log('splitting payment'); - console.log('tofirst: ' + toFirst); - console.log('tosecond: ' + toSecond); - console.log('valueFirst: ' + valueFirst); - console.log('valueSecond: ' + valueSecond); - console.log('tokenADdress: ' + tokenAddress); - deployedSplitter.methods.splitTransfer(toFirst, toSecond, valueFirst, valueSecond, tokenAddress).send({ from: account, gas: web3.utils.toHex(100000) @@ -394,7 +373,6 @@ const splitPayment = (account, toFirst, toSecond, valueFirst, valueSecond) => { }).on('transactionHash', function(transactionHash) { waitforData(() => { document.suppress_loading_leave_code = true; - console.log('loading url: ' + redirectURL); window.location = redirectURL; }); From a270291835814636c452046ad54db3da29851c4a Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 23:04:04 +0900 Subject: [PATCH 11/13] remove url reference --- app/assets/v2/js/grants/fund.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index ae845339597..6e605123f36 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -180,8 +180,6 @@ $(document).ready(function() { $('#contributor_address').val(accounts[0]); - let url; - var approvalAddress; if (data.num_periods == 1) { @@ -346,7 +344,7 @@ const saveSubscription = (data, isOneTimePayment) => { error: (error) => { console.log(error); _alert({ message: gettext('Your subscription failed to save. Please try again.') }, 'error'); - url = window.location; + redirectURL = window.location; } }); }; From 203b98bff23ad9ba25e7ca6509830146bc201d8e Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 23:21:07 +0900 Subject: [PATCH 12/13] wait for data each to be done before saving --- app/assets/v2/js/grants/fund.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 6e605123f36..9595bbca475 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -356,7 +356,7 @@ const splitPayment = (account, toFirst, toSecond, valueFirst, valueSecond) => { $.each($(form).serializeArray(), function() { data[this.name] = this.value; }); - saveSubscription(data, true); + $.when.apply($, data).then(saveSubscription(data, true);); let deployedSplitter = new web3.eth.Contract(compiledSplitter.abiDefinition, splitterAddress); From 41d4c16b846e595e5a41d646da97c78fd28d5a97 Mon Sep 17 00:00:00 2001 From: Dan Lipert Date: Wed, 22 May 2019 23:24:02 +0900 Subject: [PATCH 13/13] undo async check --- app/assets/v2/js/grants/fund.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/assets/v2/js/grants/fund.js b/app/assets/v2/js/grants/fund.js index 9595bbca475..1fbad71f691 100644 --- a/app/assets/v2/js/grants/fund.js +++ b/app/assets/v2/js/grants/fund.js @@ -356,7 +356,8 @@ const splitPayment = (account, toFirst, toSecond, valueFirst, valueSecond) => { $.each($(form).serializeArray(), function() { data[this.name] = this.value; }); - $.when.apply($, data).then(saveSubscription(data, true);); + + saveSubscription(data, true); let deployedSplitter = new web3.eth.Contract(compiledSplitter.abiDefinition, splitterAddress);