{
  "contractName": "ERC20SaleRenderer",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "inputsRenderer",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_renderers",
          "type": "address[]"
        }
      ],
      "name": "setAdminWidgetRenderers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "numberOfAdminWidgetRenderers",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getAdminWidgetRendererAt",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_renderers",
          "type": "address[]"
        }
      ],
      "name": "setUserWidgetRenderers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "numberOfUserWidgetRenderers",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getUserWidgetRendererAt",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_renderer",
          "type": "address"
        }
      ],
      "name": "setInputsRenderer",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_locale",
          "type": "string"
        },
        {
          "name": "_sale",
          "type": "address"
        }
      ],
      "name": "adminWidgets",
      "outputs": [
        {
          "name": "jsonObject",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_locale",
          "type": "string"
        },
        {
          "name": "_sale",
          "type": "address"
        }
      ],
      "name": "userWidgets",
      "outputs": [
        {
          "name": "jsonObject",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_locale",
          "type": "string"
        },
        {
          "name": "_sale",
          "type": "address"
        }
      ],
      "name": "inputs",
      "outputs": [
        {
          "name": "jsonArray",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260008054600160a060020a03191633179055610cdd806100256000396000f3006080604052600436106100ce5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626c8e7f81146100d3578063020849be146101075780630a709e591461015e5780633634a20c146101735780635d36af89146101c8578063715018a6146101e057806385295c19146101f55780638da5cb5b1461021c578063a1f40d8f14610231578063bbb7b46a14610252578063bf3bed5414610267578063e77cee3d14610340578063e9499555146103a4578063f2fde38b14610408575b600080fd5b3480156100df57600080fd5b506100eb600435610429565b60408051600160a060020a039092168252519081900360200190f35b34801561011357600080fd5b506040805160206004803580820135838102808601850190965280855261015c953695939460249493850192918291850190849080828437509497506104559650505050505050565b005b34801561016a57600080fd5b506100eb610483565b34801561017f57600080fd5b506040805160206004803580820135838102808601850190965280855261015c953695939460249493850192918291850190849080828437509497506104929650505050505050565b3480156101d457600080fd5b506100eb6004356104bc565b3480156101ec57600080fd5b5061015c6104cd565b34801561020157600080fd5b5061020a610539565b60408051918252519081900360200190f35b34801561022857600080fd5b506100eb610540565b34801561023d57600080fd5b5061015c600160a060020a036004351661054f565b34801561025e57600080fd5b5061020a610595565b34801561027357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102cb94369492936024939284019190819084018382808284375094975050509235600160a060020a0316935061059b92505050565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103055781810151838201526020016102ed565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034c57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102cb94369492936024939284019190819084018382808284375094975050509235600160a060020a031693506106ff92505050565b3480156103b057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102cb94369492936024939284019190819084018382808284375094975050509235600160a060020a0316935061076d92505050565b34801561041457600080fd5b5061015c600160a060020a03600435166107d2565b600060028281548110151561043a57fe5b600091825260209091200154600160a060020a031692915050565b600054600160a060020a0316331461046c57600080fd5b805161047f906002906020840190610bf7565b5050565b600354600160a060020a031681565b600054600160a060020a031633146104a957600080fd5b805161047f906001906020840190610bf7565b600060018281548110151561043a57fe5b600054600160a060020a031633146104e457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6001545b90565b600054600160a060020a031681565b600054600160a060020a0316331461056657600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025490565b600354604080517fca1a70be000000000000000000000000000000000000000000000000000000008152600160a060020a03848116602483015260048201928352855160448301528551606094919091169263ca1a70be9287928792918291606490910190602086019080838360005b8381101561062357818101518382015260200161060b565b50505050905090810190601f1680156106505780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156106ad57600080fd5b8101908080516401000000008111156106c557600080fd5b820160208101848111156106d857600080fd5b81516401000000008111828201871017156106f257600080fd5b5090979650505050505050565b60606107668383600280548060200260200160405190810160405280929190818152602001828054801561075c57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161073e575b50505050506107f5565b9392505050565b60606107668383600180548060200260200160405190810160405280929190818152602001828054801561075c57602002820191906000526020600020908154600160a060020a0316815260019091019060200180831161073e5750505050506107f5565b600054600160a060020a031633146107e957600080fd5b6107f281610a99565b50565b60408051808201909152600181527f5b00000000000000000000000000000000000000000000000000000000000000602082015260609060008080845b8651831015610a4b57868381518110151561084957fe5b90602001906020020151915081600160a060020a031663ca1a70be8a8a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b838110156108e65781810151838201526020016108ce565b50505050905090810190601f1680156109135780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561097057600080fd5b81019080805164010000000081111561098857600080fd5b8201602081018481111561099b57600080fd5b81516401000000008111828201871017156109b557600080fd5b50509291905050509050600081511115610a40576000841115610a2b57610a28610a136040805190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250610b16565b610a1c87610b16565b9063ffffffff610b3c16565b94505b610a37610a1382610b16565b94506001909301925b600190920191610832565b610a8c610a136040805190810160405280600181526020017f5d00000000000000000000000000000000000000000000000000000000000000815250610b16565b9998505050505050505050565b600160a060020a0381161515610aae57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610b1e610c69565b50604080518082019091528151815260209182019181019190915290565b606080600083600001518560000151016040519080825280601f01601f191660200182016040528015610b79578160200160208202803883390190505b509150602082019050610b958186602001518760000151610bb3565b845160208501518551610bab9284019190610bb3565b509392505050565b60005b60208210610bd8578251845260209384019390920191601f1990910190610bb6565b50905182516020929092036101000a6000190180199091169116179052565b828054828255906000526020600020908101928215610c59579160200282015b82811115610c59578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190610c17565b50610c65929150610c80565b5090565b604080518082019091526000808252602082015290565b61053d91905b80821115610c6557805473ffffffffffffffffffffffffffffffffffffffff19168155600101610c865600a165627a7a72305820c7ded3bb7b4df1ddcacc69bc384bbdb2dc054af27ac2a6ccf10ddd7f50eac34f0029",
  "deployedBytecode": "0x6080604052600436106100ce5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416626c8e7f81146100d3578063020849be146101075780630a709e591461015e5780633634a20c146101735780635d36af89146101c8578063715018a6146101e057806385295c19146101f55780638da5cb5b1461021c578063a1f40d8f14610231578063bbb7b46a14610252578063bf3bed5414610267578063e77cee3d14610340578063e9499555146103a4578063f2fde38b14610408575b600080fd5b3480156100df57600080fd5b506100eb600435610429565b60408051600160a060020a039092168252519081900360200190f35b34801561011357600080fd5b506040805160206004803580820135838102808601850190965280855261015c953695939460249493850192918291850190849080828437509497506104559650505050505050565b005b34801561016a57600080fd5b506100eb610483565b34801561017f57600080fd5b506040805160206004803580820135838102808601850190965280855261015c953695939460249493850192918291850190849080828437509497506104929650505050505050565b3480156101d457600080fd5b506100eb6004356104bc565b3480156101ec57600080fd5b5061015c6104cd565b34801561020157600080fd5b5061020a610539565b60408051918252519081900360200190f35b34801561022857600080fd5b506100eb610540565b34801561023d57600080fd5b5061015c600160a060020a036004351661054f565b34801561025e57600080fd5b5061020a610595565b34801561027357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102cb94369492936024939284019190819084018382808284375094975050509235600160a060020a0316935061059b92505050565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103055781810151838201526020016102ed565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034c57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102cb94369492936024939284019190819084018382808284375094975050509235600160a060020a031693506106ff92505050565b3480156103b057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102cb94369492936024939284019190819084018382808284375094975050509235600160a060020a0316935061076d92505050565b34801561041457600080fd5b5061015c600160a060020a03600435166107d2565b600060028281548110151561043a57fe5b600091825260209091200154600160a060020a031692915050565b600054600160a060020a0316331461046c57600080fd5b805161047f906002906020840190610bf7565b5050565b600354600160a060020a031681565b600054600160a060020a031633146104a957600080fd5b805161047f906001906020840190610bf7565b600060018281548110151561043a57fe5b600054600160a060020a031633146104e457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6001545b90565b600054600160a060020a031681565b600054600160a060020a0316331461056657600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60025490565b600354604080517fca1a70be000000000000000000000000000000000000000000000000000000008152600160a060020a03848116602483015260048201928352855160448301528551606094919091169263ca1a70be9287928792918291606490910190602086019080838360005b8381101561062357818101518382015260200161060b565b50505050905090810190601f1680156106505780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156106ad57600080fd5b8101908080516401000000008111156106c557600080fd5b820160208101848111156106d857600080fd5b81516401000000008111828201871017156106f257600080fd5b5090979650505050505050565b60606107668383600280548060200260200160405190810160405280929190818152602001828054801561075c57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161073e575b50505050506107f5565b9392505050565b60606107668383600180548060200260200160405190810160405280929190818152602001828054801561075c57602002820191906000526020600020908154600160a060020a0316815260019091019060200180831161073e5750505050506107f5565b600054600160a060020a031633146107e957600080fd5b6107f281610a99565b50565b60408051808201909152600181527f5b00000000000000000000000000000000000000000000000000000000000000602082015260609060008080845b8651831015610a4b57868381518110151561084957fe5b90602001906020020151915081600160a060020a031663ca1a70be8a8a6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200183600160a060020a0316600160a060020a03168152602001828103825284818151815260200191508051906020019080838360005b838110156108e65781810151838201526020016108ce565b50505050905090810190601f1680156109135780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561097057600080fd5b81019080805164010000000081111561098857600080fd5b8201602081018481111561099b57600080fd5b81516401000000008111828201871017156109b557600080fd5b50509291905050509050600081511115610a40576000841115610a2b57610a28610a136040805190810160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250610b16565b610a1c87610b16565b9063ffffffff610b3c16565b94505b610a37610a1382610b16565b94506001909301925b600190920191610832565b610a8c610a136040805190810160405280600181526020017f5d00000000000000000000000000000000000000000000000000000000000000815250610b16565b9998505050505050505050565b600160a060020a0381161515610aae57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610b1e610c69565b50604080518082019091528151815260209182019181019190915290565b606080600083600001518560000151016040519080825280601f01601f191660200182016040528015610b79578160200160208202803883390190505b509150602082019050610b958186602001518760000151610bb3565b845160208501518551610bab9284019190610bb3565b509392505050565b60005b60208210610bd8578251845260209384019390920191601f1990910190610bb6565b50905182516020929092036101000a6000190180199091169116179052565b828054828255906000526020600020908101928215610c59579160200282015b82811115610c59578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190610c17565b50610c65929150610c80565b5090565b604080518082019091526000808252602082015290565b61053d91905b80821115610c6557805473ffffffffffffffffffffffffffffffffffffffff19168155600101610c865600a165627a7a72305820c7ded3bb7b4df1ddcacc69bc384bbdb2dc054af27ac2a6ccf10ddd7f50eac34f0029",
  "sourceMap": "134:2391:3:-;;;567:5:27;:18;;-1:-1:-1;;;;;;567:18:27;575:10;567:18;;;134:2391:3;;;;;;",
  "deployedSourceMap": "134:2391:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1040:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1040:141:3;;;;;;;;;-1:-1:-1;;;;;1040:141:3;;;;;;;;;;;;;;776:136;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;776:136:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;776:136:3;;-1:-1:-1;776:136:3;;-1:-1:-1;;;;;;;776:136:3;;;307:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;307:45:3;;;;359:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;359:138:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;359:138:3;;-1:-1:-1;359:138:3;;-1:-1:-1;;;;;;;359:138:3;627:143;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;627:143:3;;;;;1001:111:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1001:111:27;;;;503:118:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;503:118:3;;;;;;;;;;;;;;;;;;;;238:20:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:27;;;;1187:122:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1187:122:3;-1:-1:-1;;;;;1187:122:3;;;;;918:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;918:116:3;;;;2374:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2374:149:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2374:149:3;;-1:-1:-1;;;2374:149:3;;-1:-1:-1;;;;;2374:149:3;;-1:-1:-1;2374:149:3;;-1:-1:-1;;;2374:149:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2374:149:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1486:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1486:163:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1486:163:3;;-1:-1:-1;;;1486:163:3;;-1:-1:-1;;;;;1486:163:3;;-1:-1:-1;1486:163:3;;-1:-1:-1;;;1486:163:3;1315:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1315:165:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1315:165:3;;-1:-1:-1;;;1315:165:3;;-1:-1:-1;;;;;1315:165:3;;-1:-1:-1;1315:165:3;;-1:-1:-1;;;1315:165:3;1274:103:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1274:103:27;-1:-1:-1;;;;;1274:103:27;;;;;1040:141:3;1106:23;1148:19;1168:5;1148:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1148:26:3;;1040:141;-1:-1:-1;;1040:141:3:o;776:136::-;719:5:27;;-1:-1:-1;;;;;719:5:27;705:10;:19;697:28;;;;;;873:32:3;;;;:19;;:32;;;;;:::i;:::-;;776:136;:::o;307:45::-;;;-1:-1:-1;;;;;307:45:3;;:::o;359:138::-;719:5:27;;-1:-1:-1;;;;;719:5:27;705:10;:19;697:28;;;;;;457:33:3;;;;:20;;:33;;;;;:::i;627:143::-;694:23;736:20;757:5;736:27;;;;;;;;;1001:111:27;719:5;;-1:-1:-1;;;;;719:5:27;705:10;:19;697:28;;;;;;1077:5;;;1058:25;;-1:-1:-1;;;;;1077:5:27;;;;1058:25;;;1105:1;1089:18;;-1:-1:-1;;1089:18:27;;;1001:111::o;503:118:3:-;587:20;:27;503:118;;:::o;238:20:27:-;;;-1:-1:-1;;;;;238:20:27;;:::o;1187:122:3:-;719:5:27;;-1:-1:-1;;;;;719:5:27;705:10;:19;697:28;;;;;;1276:14:3;:26;;-1:-1:-1;;1276:26:3;-1:-1:-1;;;;;1276:26:3;;;;;;;;;;1187:122::o;918:116::-;1001:19;:26;918:116;:::o;2374:149::-;2479:14;;:37;;;;;;-1:-1:-1;;;;;2479:37:3;;;;;;;;;;;;;;;;;;;;;2444:16;;2479:14;;;;;:21;;2501:7;;2510:5;;2479:37;;;;;;;;;;;;;;;:14;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2479:37:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2479:37:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2479:37:3;;;;;;39:16:-1;36:1;17:17;2:54;101:4;2479:37:3;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;2479:37:3;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;-1:-1;2479:37:3;;2374:149;-1:-1:-1;;;;;;;2374:149:3:o;1486:163::-;1561:17;1597:45;1606:7;1615:5;1622:19;1597:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1597:45:3;;;;;;;;;;;;;;;;;;;;;:8;:45::i;:::-;1590:52;1486:163;-1:-1:-1;;;1486:163:3:o;1315:165::-;1391:17;1427:46;1436:7;1445:5;1452:20;1427:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1427:46:3;;;;;;;;;;;;;;;;;;;;:8;:46::i;1274:103:27:-;719:5;;-1:-1:-1;;;;;719:5:27;705:10;:19;697:28;;;;;;1343:29;1362:9;1343:18;:29::i;:::-;1274:103;:::o;1655:713:3:-;1789:24;;;;;;;;;;;;;;;;;1771:6;;1823:11;;;1771:6;1848:461;1869:15;:22;1865:1;:26;1848:461;;;1947:15;1963:1;1947:18;;;;;;;;;;;;;;;;;;1912:53;;2002:8;-1:-1:-1;;;;;2002:15:3;;2018:7;2027:5;2002:31;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2002:31:3;-1:-1:-1;;;;;2002:31:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2002:31:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2002:31:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2002:31:3;;;;;;39:16:-1;36:1;17:17;2:54;101:4;2002:31:3;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;2002:31:3;;;;;;20:11:-1;15:3;12:20;9:2;;;45:1;42;35:12;9:2;64:21;;126:4;117:14;;142:31;;;139:2;;;186:1;183;176:12;139:2;218:10;;268:11;251:29;;293:43;;;290:58;-1:-1;239:118;236:2;;;370:1;367;360:12;236:2;0:382;;2002:31:3;;;;;;1979:54;;2074:1;2057:6;2051:20;:24;2047:252;;;2108:1;2099:6;:10;2095:100;;;2140:36;2162:13;:11;;;;;;;;;;;;;;;;;;;:13::i;:::-;2140:14;:4;:12;:14::i;:::-;:21;:36;:21;:36;:::i;:::-;2133:43;;2095:100;2219:39;2241:16;:6;:14;:16::i;2219:39::-;2212:46;-1:-1:-1;2276:8:3;;;;;2047:252;1893:3;;;;;1848:461;;;2325:36;2347:13;:11;;;;;;;;;;;;;;;;;;;:13::i;2325:36::-;2318:43;1655:713;-1:-1:-1;;;;;;;;;1655:713:3:o;1512:171:27:-;-1:-1:-1;;;;;1582:23:27;;;;1574:32;;;;;;1638:5;;;1617:38;;-1:-1:-1;;;;;1617:38:27;;;;1638:5;;;1617:38;;;1661:5;:17;;-1:-1:-1;;1661:17:27;-1:-1:-1;;;;;1661:17:27;;;;;;;;;;1512:171::o;2837:210:18:-;2897:5;;:::i;:::-;-1:-1:-1;3010:30:18;;;;;;;;;3016:18;;3010:30;;2979:4;2969:15;;;3010:30;;;;;;;;2837:210::o;23944:355::-;24022:6;24047:17;24111:11;24090:5;:10;;;24078:4;:9;;;:22;24067:34;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;24067:34:18;;24047:54;;24162:2;24157:3;24153:12;24143:22;;24176:36;24183:6;24191:4;:9;;;24202:4;:9;;;24176:6;:36::i;:::-;24238:9;;24249:10;;;;24261;;24222:50;;24229:18;;;24249:10;24222:6;:50::i;:::-;-1:-1:-1;24289:3:18;23944:355;-1:-1:-1;;;23944:355:18:o;2089:548::-;2415:9;2209:164;2222:2;2215:9;;2209:164;;2291:10;;2278:24;;2337:2;2329:10;;;;2353:9;;;;-1:-1:-1;;2226:9:18;;;;2209:164;;;-1:-1:-1;2500:10:18;;2555:11;;2435:2;:8;;;;2427:3;:17;-1:-1:-1;;2427:21:18;2512:9;;2496:26;;;2551:22;;2599:21;2586:35;;2467:164::o;134:2391:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;134:2391:3;-1:-1:-1;;;;;134:2391:3;;;;;;;;;;;-1:-1:-1;134:2391:3;;;;;;;-1:-1:-1;134:2391:3;;;-1:-1:-1;134:2391:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;-1:-1:-1;134:2391:3;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;134:2391:3;;;;;;",
  "source": "pragma solidity ^0.4.24;\n\nimport \"../ERC20Sale.sol\";\nimport \"./ERC20SaleWidgetRenderer.sol\";\nimport \"./ERC20SaleInputsRenderer.sol\";\n\ncontract ERC20SaleRenderer is Ownable {\n    using strings for *;\n\n    ERC20SaleWidgetRenderer[] adminWidgetRenderers;\n    ERC20SaleWidgetRenderer[] userWidgetRenderers;\n    ERC20SaleInputsRenderer public inputsRenderer;\n\n    function setAdminWidgetRenderers(ERC20SaleWidgetRenderer[] _renderers) onlyOwner public {\n        adminWidgetRenderers = _renderers;\n    }\n\n    function numberOfAdminWidgetRenderers() public view returns (uint) {\n        return adminWidgetRenderers.length;\n    }\n\n    function getAdminWidgetRendererAt(uint index) public view returns (ERC20SaleWidgetRenderer) {\n        return adminWidgetRenderers[index];\n    }\n\n    function setUserWidgetRenderers(ERC20SaleWidgetRenderer[] _renderers) onlyOwner public {\n        userWidgetRenderers = _renderers;\n    }\n\n    function numberOfUserWidgetRenderers() public view returns (uint) {\n        return userWidgetRenderers.length;\n    }\n\n    function getUserWidgetRendererAt(uint index) public view returns (ERC20SaleWidgetRenderer) {\n        return userWidgetRenderers[index];\n    }\n\n    function setInputsRenderer(ERC20SaleInputsRenderer _renderer) onlyOwner public {\n        inputsRenderer = _renderer;\n    }\n\n    function adminWidgets(string _locale, ERC20Sale _sale) public view returns (string jsonObject) {\n        return _widgets(_locale, _sale, adminWidgetRenderers);\n    }\n\n    function userWidgets(string _locale, ERC20Sale _sale) public view returns (string jsonObject) {\n        return _widgets(_locale, _sale, userWidgetRenderers);\n    }\n\n    function _widgets(string _locale, ERC20Sale _sale, ERC20SaleWidgetRenderer[] _widgetRenderes) private view returns (string) {\n        string memory json = \"[\";\n        uint length = 0;\n        for (uint i = 0; i < _widgetRenderes.length; i++) {\n            ERC20SaleWidgetRenderer renderer = _widgetRenderes[i];\n            string memory widget = renderer.render(_locale, _sale);\n            if (bytes(widget).length > 0) {\n                if (length > 0) {\n                    json = json.toSlice().concat(\",\".toSlice());\n                }\n                json = json.toSlice().concat(widget.toSlice());\n                length++;\n            }\n        }\n        return json.toSlice().concat(\"]\".toSlice());\n    }\n\n    function inputs(string _locale, ERC20Sale _sale) public view returns (string jsonArray) {\n        return inputsRenderer.render(_locale, _sale);\n    }\n}\n",
  "sourcePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleRenderer.sol",
  "ast": {
    "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleRenderer.sol",
    "exportedSymbols": {
      "ERC20SaleRenderer": [
        1155
      ]
    },
    "id": 1156,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 916,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:3"
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/ERC20Sale.sol",
        "file": "../ERC20Sale.sol",
        "id": 917,
        "nodeType": "ImportDirective",
        "scope": 1156,
        "sourceUnit": 387,
        "src": "26:26:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleWidgetRenderer.sol",
        "file": "./ERC20SaleWidgetRenderer.sol",
        "id": 918,
        "nodeType": "ImportDirective",
        "scope": 1156,
        "sourceUnit": 1175,
        "src": "53:39:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleInputsRenderer.sol",
        "file": "./ERC20SaleInputsRenderer.sol",
        "id": 919,
        "nodeType": "ImportDirective",
        "scope": 1156,
        "sourceUnit": 915,
        "src": "93:39:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 920,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5355,
              "src": "164:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$5355",
                "typeString": "contract Ownable"
              }
            },
            "id": 921,
            "nodeType": "InheritanceSpecifier",
            "src": "164:7:3"
          }
        ],
        "contractDependencies": [
          5355
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1155,
        "linearizedBaseContracts": [
          1155,
          5355
        ],
        "name": "ERC20SaleRenderer",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 923,
            "libraryName": {
              "contractScope": null,
              "id": 922,
              "name": "strings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4333,
              "src": "184:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_strings_$4333",
                "typeString": "library strings"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "178:20:3",
            "typeName": null
          },
          {
            "constant": false,
            "id": 926,
            "name": "adminWidgetRenderers",
            "nodeType": "VariableDeclaration",
            "scope": 1155,
            "src": "204:46:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
              "typeString": "contract ERC20SaleWidgetRenderer[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 924,
                "name": "ERC20SaleWidgetRenderer",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1174,
                "src": "204:23:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                  "typeString": "contract ERC20SaleWidgetRenderer"
                }
              },
              "id": 925,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "204:25:3",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                "typeString": "contract ERC20SaleWidgetRenderer[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 929,
            "name": "userWidgetRenderers",
            "nodeType": "VariableDeclaration",
            "scope": 1155,
            "src": "256:45:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
              "typeString": "contract ERC20SaleWidgetRenderer[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 927,
                "name": "ERC20SaleWidgetRenderer",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1174,
                "src": "256:23:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                  "typeString": "contract ERC20SaleWidgetRenderer"
                }
              },
              "id": 928,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "256:25:3",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                "typeString": "contract ERC20SaleWidgetRenderer[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 931,
            "name": "inputsRenderer",
            "nodeType": "VariableDeclaration",
            "scope": 1155,
            "src": "307:45:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
              "typeString": "contract ERC20SaleInputsRenderer"
            },
            "typeName": {
              "contractScope": null,
              "id": 930,
              "name": "ERC20SaleInputsRenderer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 914,
              "src": "307:23:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                "typeString": "contract ERC20SaleInputsRenderer"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 943,
              "nodeType": "Block",
              "src": "447:50:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 939,
                      "name": "adminWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 926,
                      "src": "457:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 940,
                      "name": "_renderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 934,
                      "src": "480:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                        "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                      }
                    },
                    "src": "457:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                      "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                    }
                  },
                  "id": 942,
                  "nodeType": "ExpressionStatement",
                  "src": "457:33:3"
                }
              ]
            },
            "documentation": null,
            "id": 944,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 937,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 936,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5303,
                  "src": "430:9:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "430:9:3"
              }
            ],
            "name": "setAdminWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 935,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 934,
                  "name": "_renderers",
                  "nodeType": "VariableDeclaration",
                  "scope": 944,
                  "src": "392:36:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                    "typeString": "contract ERC20SaleWidgetRenderer[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 932,
                      "name": "ERC20SaleWidgetRenderer",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1174,
                      "src": "392:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                        "typeString": "contract ERC20SaleWidgetRenderer"
                      }
                    },
                    "id": 933,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "392:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                      "typeString": "contract ERC20SaleWidgetRenderer[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "391:38:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "447:0:3"
            },
            "scope": 1155,
            "src": "359:138:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 952,
              "nodeType": "Block",
              "src": "570:51:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 949,
                      "name": "adminWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 926,
                      "src": "587:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 950,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "587:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 948,
                  "id": 951,
                  "nodeType": "Return",
                  "src": "580:34:3"
                }
              ]
            },
            "documentation": null,
            "id": 953,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "numberOfAdminWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 945,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "540:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 948,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 947,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "564:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 946,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "564:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "563:6:3"
            },
            "scope": 1155,
            "src": "503:118:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 964,
              "nodeType": "Block",
              "src": "719:51:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 960,
                      "name": "adminWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 926,
                      "src": "736:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 962,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 961,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 955,
                      "src": "757:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "736:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "functionReturnParameters": 959,
                  "id": 963,
                  "nodeType": "Return",
                  "src": "729:34:3"
                }
              ]
            },
            "documentation": null,
            "id": 965,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getAdminWidgetRendererAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 955,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 965,
                  "src": "661:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "661:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "660:12:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 958,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 965,
                  "src": "694:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                    "typeString": "contract ERC20SaleWidgetRenderer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 957,
                    "name": "ERC20SaleWidgetRenderer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1174,
                    "src": "694:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "693:25:3"
            },
            "scope": 1155,
            "src": "627:143:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 977,
              "nodeType": "Block",
              "src": "863:49:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 973,
                      "name": "userWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 929,
                      "src": "873:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 974,
                      "name": "_renderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 968,
                      "src": "895:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                        "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                      }
                    },
                    "src": "873:32:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                      "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                    }
                  },
                  "id": 976,
                  "nodeType": "ExpressionStatement",
                  "src": "873:32:3"
                }
              ]
            },
            "documentation": null,
            "id": 978,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 971,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 970,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5303,
                  "src": "846:9:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "846:9:3"
              }
            ],
            "name": "setUserWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 968,
                  "name": "_renderers",
                  "nodeType": "VariableDeclaration",
                  "scope": 978,
                  "src": "808:36:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                    "typeString": "contract ERC20SaleWidgetRenderer[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 966,
                      "name": "ERC20SaleWidgetRenderer",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1174,
                      "src": "808:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                        "typeString": "contract ERC20SaleWidgetRenderer"
                      }
                    },
                    "id": 967,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "808:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                      "typeString": "contract ERC20SaleWidgetRenderer[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "807:38:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 972,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "863:0:3"
            },
            "scope": 1155,
            "src": "776:136:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 986,
              "nodeType": "Block",
              "src": "984:50:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 983,
                      "name": "userWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 929,
                      "src": "1001:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 984,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1001:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 982,
                  "id": 985,
                  "nodeType": "Return",
                  "src": "994:33:3"
                }
              ]
            },
            "documentation": null,
            "id": 987,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "numberOfUserWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 979,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "954:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 987,
                  "src": "978:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 980,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "978:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "977:6:3"
            },
            "scope": 1155,
            "src": "918:116:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 998,
              "nodeType": "Block",
              "src": "1131:50:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 994,
                      "name": "userWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 929,
                      "src": "1148:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 996,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 995,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 989,
                      "src": "1168:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1148:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "functionReturnParameters": 993,
                  "id": 997,
                  "nodeType": "Return",
                  "src": "1141:33:3"
                }
              ]
            },
            "documentation": null,
            "id": 999,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getUserWidgetRendererAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 989,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 999,
                  "src": "1073:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 988,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1073:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1072:12:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 999,
                  "src": "1106:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                    "typeString": "contract ERC20SaleWidgetRenderer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 991,
                    "name": "ERC20SaleWidgetRenderer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1174,
                    "src": "1106:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1105:25:3"
            },
            "scope": 1155,
            "src": "1040:141:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1010,
              "nodeType": "Block",
              "src": "1266:43:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1006,
                      "name": "inputsRenderer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 931,
                      "src": "1276:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                        "typeString": "contract ERC20SaleInputsRenderer"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1007,
                      "name": "_renderer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1001,
                      "src": "1293:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                        "typeString": "contract ERC20SaleInputsRenderer"
                      }
                    },
                    "src": "1276:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                      "typeString": "contract ERC20SaleInputsRenderer"
                    }
                  },
                  "id": 1009,
                  "nodeType": "ExpressionStatement",
                  "src": "1276:26:3"
                }
              ]
            },
            "documentation": null,
            "id": 1011,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1004,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1003,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5303,
                  "src": "1249:9:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1249:9:3"
              }
            ],
            "name": "setInputsRenderer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1001,
                  "name": "_renderer",
                  "nodeType": "VariableDeclaration",
                  "scope": 1011,
                  "src": "1214:33:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                    "typeString": "contract ERC20SaleInputsRenderer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1000,
                    "name": "ERC20SaleInputsRenderer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 914,
                    "src": "1214:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                      "typeString": "contract ERC20SaleInputsRenderer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1213:35:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1266:0:3"
            },
            "scope": 1155,
            "src": "1187:122:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1026,
              "nodeType": "Block",
              "src": "1410:70:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1021,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1013,
                        "src": "1436:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1022,
                        "name": "_sale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1015,
                        "src": "1445:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1023,
                        "name": "adminWidgetRenderers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 926,
                        "src": "1452:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        },
                        {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      ],
                      "id": 1020,
                      "name": "_widgets",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1138,
                      "src": "1427:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$_t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (string memory,contract ERC20Sale,contract ERC20SaleWidgetRenderer[] memory) view returns (string memory)"
                      }
                    },
                    "id": 1024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1427:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1019,
                  "id": 1025,
                  "nodeType": "Return",
                  "src": "1420:53:3"
                }
              ]
            },
            "documentation": null,
            "id": 1027,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "adminWidgets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1013,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "1337:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1012,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1337:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1015,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "1353:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1014,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "1353:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1336:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1018,
                  "name": "jsonObject",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "1391:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1017,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1391:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1390:19:3"
            },
            "scope": 1155,
            "src": "1315:165:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1042,
              "nodeType": "Block",
              "src": "1580:69:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1037,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1029,
                        "src": "1606:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1038,
                        "name": "_sale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1031,
                        "src": "1615:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1039,
                        "name": "userWidgetRenderers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 929,
                        "src": "1622:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        },
                        {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      ],
                      "id": 1036,
                      "name": "_widgets",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1138,
                      "src": "1597:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$_t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (string memory,contract ERC20Sale,contract ERC20SaleWidgetRenderer[] memory) view returns (string memory)"
                      }
                    },
                    "id": 1040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1597:45:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1035,
                  "id": 1041,
                  "nodeType": "Return",
                  "src": "1590:52:3"
                }
              ]
            },
            "documentation": null,
            "id": 1043,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "userWidgets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1029,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "1507:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1028,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1507:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1031,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "1523:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1030,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "1523:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1506:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1034,
                  "name": "jsonObject",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "1561:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1033,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1561:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1560:19:3"
            },
            "scope": 1155,
            "src": "1486:163:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1137,
              "nodeType": "Block",
              "src": "1779:589:3",
              "statements": [
                {
                  "assignments": [
                    1056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1056,
                      "name": "json",
                      "nodeType": "VariableDeclaration",
                      "scope": 1138,
                      "src": "1789:18:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1055,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "1789:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1058,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "5b",
                    "id": 1057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1810:3:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_9f50164828976b6baa479ea39c718c745bbc0d2521b67dfde8474cbdc9711057",
                      "typeString": "literal_string \"[\""
                    },
                    "value": "["
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1789:24:3"
                },
                {
                  "assignments": [
                    1060
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1060,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 1138,
                      "src": "1823:11:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1059,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1823:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1062,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1837:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1823:15:3"
                },
                {
                  "body": {
                    "id": 1126,
                    "nodeType": "Block",
                    "src": "1898:411:3",
                    "statements": [
                      {
                        "assignments": [
                          1075
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1075,
                            "name": "renderer",
                            "nodeType": "VariableDeclaration",
                            "scope": 1138,
                            "src": "1912:32:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                              "typeString": "contract ERC20SaleWidgetRenderer"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1074,
                              "name": "ERC20SaleWidgetRenderer",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1174,
                              "src": "1912:23:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                                "typeString": "contract ERC20SaleWidgetRenderer"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1079,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1076,
                            "name": "_widgetRenderes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1050,
                            "src": "1947:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                              "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                            }
                          },
                          "id": 1078,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1077,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1064,
                            "src": "1963:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1947:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                            "typeString": "contract ERC20SaleWidgetRenderer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1912:53:3"
                      },
                      {
                        "assignments": [
                          1081
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1081,
                            "name": "widget",
                            "nodeType": "VariableDeclaration",
                            "scope": 1138,
                            "src": "1979:20:3",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 1080,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "1979:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1087,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1084,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1045,
                              "src": "2018:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1085,
                              "name": "_sale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1047,
                              "src": "2027:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20Sale_$386",
                                "typeString": "contract ERC20Sale"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_contract$_ERC20Sale_$386",
                                "typeString": "contract ERC20Sale"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1082,
                              "name": "renderer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1075,
                              "src": "2002:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                                "typeString": "contract ERC20SaleWidgetRenderer"
                              }
                            },
                            "id": 1083,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "render",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1173,
                            "src": "2002:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (string memory,contract ERC20Sale) view external returns (string memory)"
                            }
                          },
                          "id": 1086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2002:31:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1979:54:3"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1089,
                                  "name": "widget",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1081,
                                  "src": "2057:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 1088,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2051:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": "bytes"
                              },
                              "id": 1090,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2051:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1091,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2051:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1092,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2074:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2051:24:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1125,
                        "nodeType": "IfStatement",
                        "src": "2047:252:3",
                        "trueBody": {
                          "id": 1124,
                          "nodeType": "Block",
                          "src": "2077:222:3",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1094,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1060,
                                  "src": "2099:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1095,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2108:1:3",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2099:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 1109,
                              "nodeType": "IfStatement",
                              "src": "2095:100:3",
                              "trueBody": {
                                "id": 1108,
                                "nodeType": "Block",
                                "src": "2111:84:3",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1106,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1097,
                                        "name": "json",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1056,
                                        "src": "2133:4:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                              "argumentTypes": [],
                                              "expression": {
                                                "argumentTypes": null,
                                                "hexValue": "2c",
                                                "id": 1102,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2162:3:3",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                  "typeString": "literal_string \",\""
                                                },
                                                "value": ","
                                              },
                                              "id": 1103,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "toSlice",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2705,
                                              "src": "2162:11:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                                "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                              }
                                            },
                                            "id": 1104,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2162:13:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                              "argumentTypes": [],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 1098,
                                                "name": "json",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1056,
                                                "src": "2140:4:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_string_memory_ptr",
                                                  "typeString": "string memory"
                                                }
                                              },
                                              "id": 1099,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "toSlice",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2705,
                                              "src": "2140:12:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                                "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                              }
                                            },
                                            "id": 1100,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2140:14:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          },
                                          "id": 1101,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "concat",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 4218,
                                          "src": "2140:21:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2645_memory_ptr_$_t_struct$_slice_$2645_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2645_memory_ptr_$",
                                            "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                                          }
                                        },
                                        "id": 1105,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2140:36:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      },
                                      "src": "2133:43:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    },
                                    "id": 1107,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2133:43:3"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1119,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1110,
                                  "name": "json",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1056,
                                  "src": "2212:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1115,
                                          "name": "widget",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1081,
                                          "src": "2241:6:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        },
                                        "id": 1116,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "toSlice",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2705,
                                        "src": "2241:14:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                        }
                                      },
                                      "id": 1117,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2241:16:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1111,
                                          "name": "json",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1056,
                                          "src": "2219:4:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        },
                                        "id": 1112,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "toSlice",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2705,
                                        "src": "2219:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                        }
                                      },
                                      "id": 1113,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2219:14:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 1114,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "concat",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4218,
                                    "src": "2219:21:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2645_memory_ptr_$_t_struct$_slice_$2645_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2645_memory_ptr_$",
                                      "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                                    }
                                  },
                                  "id": 1118,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2219:39:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "src": "2212:46:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              "id": 1120,
                              "nodeType": "ExpressionStatement",
                              "src": "2212:46:3"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1122,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2276:8:3",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 1121,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1060,
                                  "src": "2276:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1123,
                              "nodeType": "ExpressionStatement",
                              "src": "2276:8:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1067,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1064,
                      "src": "1865:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1068,
                        "name": "_widgetRenderes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1050,
                        "src": "1869:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                          "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                        }
                      },
                      "id": 1069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1869:22:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1865:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1127,
                  "initializationExpression": {
                    "assignments": [
                      1064
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1064,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1138,
                        "src": "1853:6:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1063,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1853:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1066,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1065,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1862:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1853:10:3"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1893:3:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1071,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1064,
                        "src": "1893:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1073,
                    "nodeType": "ExpressionStatement",
                    "src": "1893:3:3"
                  },
                  "nodeType": "ForStatement",
                  "src": "1848:461:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "5d",
                            "id": 1132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2347:3:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_b36bcf9cc1d9e7f60b1f757ebd8b4694b17fc592b16065d243c43b09fde00b29",
                              "typeString": "literal_string \"]\""
                            },
                            "value": "]"
                          },
                          "id": 1133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toSlice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2705,
                          "src": "2347:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                          }
                        },
                        "id": 1134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2347:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1128,
                            "name": "json",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1056,
                            "src": "2325:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "id": 1129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toSlice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2705,
                          "src": "2325:12:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                          }
                        },
                        "id": 1130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2325:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "concat",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4218,
                      "src": "2325:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2645_memory_ptr_$_t_struct$_slice_$2645_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2645_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                      }
                    },
                    "id": 1135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2325:36:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1054,
                  "id": 1136,
                  "nodeType": "Return",
                  "src": "2318:43:3"
                }
              ]
            },
            "documentation": null,
            "id": 1138,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_widgets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1051,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1045,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1673:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1044,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1673:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1047,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1689:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1046,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "1689:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1050,
                  "name": "_widgetRenderes",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1706:41:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                    "typeString": "contract ERC20SaleWidgetRenderer[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 1048,
                      "name": "ERC20SaleWidgetRenderer",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1174,
                      "src": "1706:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                        "typeString": "contract ERC20SaleWidgetRenderer"
                      }
                    },
                    "id": 1049,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1706:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                      "typeString": "contract ERC20SaleWidgetRenderer[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1672:76:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1053,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1771:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1052,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1771:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1770:8:3"
            },
            "scope": 1155,
            "src": "1655:713:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1153,
              "nodeType": "Block",
              "src": "2462:61:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1149,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1140,
                        "src": "2501:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1150,
                        "name": "_sale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1142,
                        "src": "2510:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1147,
                        "name": "inputsRenderer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 931,
                        "src": "2479:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                          "typeString": "contract ERC20SaleInputsRenderer"
                        }
                      },
                      "id": 1148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "render",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 913,
                      "src": "2479:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (string memory,contract ERC20Sale) view external returns (string memory)"
                      }
                    },
                    "id": 1151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2479:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1146,
                  "id": 1152,
                  "nodeType": "Return",
                  "src": "2472:44:3"
                }
              ]
            },
            "documentation": null,
            "id": 1154,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "inputs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1140,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1154,
                  "src": "2390:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1139,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2390:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1142,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1154,
                  "src": "2406:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1141,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "2406:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2389:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1145,
                  "name": "jsonArray",
                  "nodeType": "VariableDeclaration",
                  "scope": 1154,
                  "src": "2444:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1144,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2444:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2443:18:3"
            },
            "scope": 1155,
            "src": "2374:149:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1156,
        "src": "134:2391:3"
      }
    ],
    "src": "0:2526:3"
  },
  "legacyAST": {
    "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleRenderer.sol",
    "exportedSymbols": {
      "ERC20SaleRenderer": [
        1155
      ]
    },
    "id": 1156,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 916,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:3"
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/ERC20Sale.sol",
        "file": "../ERC20Sale.sol",
        "id": 917,
        "nodeType": "ImportDirective",
        "scope": 1156,
        "sourceUnit": 387,
        "src": "26:26:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleWidgetRenderer.sol",
        "file": "./ERC20SaleWidgetRenderer.sol",
        "id": 918,
        "nodeType": "ImportDirective",
        "scope": 1156,
        "sourceUnit": 1175,
        "src": "53:39:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/yoonjae/SolidityProjects/tokenboost-solidity-erc20sale/contracts/sale/erc20/widget/ERC20SaleInputsRenderer.sol",
        "file": "./ERC20SaleInputsRenderer.sol",
        "id": 919,
        "nodeType": "ImportDirective",
        "scope": 1156,
        "sourceUnit": 915,
        "src": "93:39:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 920,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5355,
              "src": "164:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$5355",
                "typeString": "contract Ownable"
              }
            },
            "id": 921,
            "nodeType": "InheritanceSpecifier",
            "src": "164:7:3"
          }
        ],
        "contractDependencies": [
          5355
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1155,
        "linearizedBaseContracts": [
          1155,
          5355
        ],
        "name": "ERC20SaleRenderer",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 923,
            "libraryName": {
              "contractScope": null,
              "id": 922,
              "name": "strings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4333,
              "src": "184:7:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_strings_$4333",
                "typeString": "library strings"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "178:20:3",
            "typeName": null
          },
          {
            "constant": false,
            "id": 926,
            "name": "adminWidgetRenderers",
            "nodeType": "VariableDeclaration",
            "scope": 1155,
            "src": "204:46:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
              "typeString": "contract ERC20SaleWidgetRenderer[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 924,
                "name": "ERC20SaleWidgetRenderer",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1174,
                "src": "204:23:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                  "typeString": "contract ERC20SaleWidgetRenderer"
                }
              },
              "id": 925,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "204:25:3",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                "typeString": "contract ERC20SaleWidgetRenderer[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 929,
            "name": "userWidgetRenderers",
            "nodeType": "VariableDeclaration",
            "scope": 1155,
            "src": "256:45:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
              "typeString": "contract ERC20SaleWidgetRenderer[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 927,
                "name": "ERC20SaleWidgetRenderer",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 1174,
                "src": "256:23:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                  "typeString": "contract ERC20SaleWidgetRenderer"
                }
              },
              "id": 928,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "256:25:3",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                "typeString": "contract ERC20SaleWidgetRenderer[]"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 931,
            "name": "inputsRenderer",
            "nodeType": "VariableDeclaration",
            "scope": 1155,
            "src": "307:45:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
              "typeString": "contract ERC20SaleInputsRenderer"
            },
            "typeName": {
              "contractScope": null,
              "id": 930,
              "name": "ERC20SaleInputsRenderer",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 914,
              "src": "307:23:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                "typeString": "contract ERC20SaleInputsRenderer"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 943,
              "nodeType": "Block",
              "src": "447:50:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 939,
                      "name": "adminWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 926,
                      "src": "457:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 940,
                      "name": "_renderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 934,
                      "src": "480:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                        "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                      }
                    },
                    "src": "457:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                      "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                    }
                  },
                  "id": 942,
                  "nodeType": "ExpressionStatement",
                  "src": "457:33:3"
                }
              ]
            },
            "documentation": null,
            "id": 944,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 937,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 936,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5303,
                  "src": "430:9:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "430:9:3"
              }
            ],
            "name": "setAdminWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 935,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 934,
                  "name": "_renderers",
                  "nodeType": "VariableDeclaration",
                  "scope": 944,
                  "src": "392:36:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                    "typeString": "contract ERC20SaleWidgetRenderer[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 932,
                      "name": "ERC20SaleWidgetRenderer",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1174,
                      "src": "392:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                        "typeString": "contract ERC20SaleWidgetRenderer"
                      }
                    },
                    "id": 933,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "392:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                      "typeString": "contract ERC20SaleWidgetRenderer[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "391:38:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "447:0:3"
            },
            "scope": 1155,
            "src": "359:138:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 952,
              "nodeType": "Block",
              "src": "570:51:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 949,
                      "name": "adminWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 926,
                      "src": "587:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 950,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "587:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 948,
                  "id": 951,
                  "nodeType": "Return",
                  "src": "580:34:3"
                }
              ]
            },
            "documentation": null,
            "id": 953,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "numberOfAdminWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 945,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "540:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 948,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 947,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 953,
                  "src": "564:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 946,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "564:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "563:6:3"
            },
            "scope": 1155,
            "src": "503:118:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 964,
              "nodeType": "Block",
              "src": "719:51:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 960,
                      "name": "adminWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 926,
                      "src": "736:20:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 962,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 961,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 955,
                      "src": "757:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "736:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "functionReturnParameters": 959,
                  "id": 963,
                  "nodeType": "Return",
                  "src": "729:34:3"
                }
              ]
            },
            "documentation": null,
            "id": 965,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getAdminWidgetRendererAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 955,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 965,
                  "src": "661:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "661:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "660:12:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 959,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 958,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 965,
                  "src": "694:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                    "typeString": "contract ERC20SaleWidgetRenderer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 957,
                    "name": "ERC20SaleWidgetRenderer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1174,
                    "src": "694:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "693:25:3"
            },
            "scope": 1155,
            "src": "627:143:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 977,
              "nodeType": "Block",
              "src": "863:49:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 975,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 973,
                      "name": "userWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 929,
                      "src": "873:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 974,
                      "name": "_renderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 968,
                      "src": "895:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                        "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                      }
                    },
                    "src": "873:32:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                      "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                    }
                  },
                  "id": 976,
                  "nodeType": "ExpressionStatement",
                  "src": "873:32:3"
                }
              ]
            },
            "documentation": null,
            "id": 978,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 971,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 970,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5303,
                  "src": "846:9:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "846:9:3"
              }
            ],
            "name": "setUserWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 968,
                  "name": "_renderers",
                  "nodeType": "VariableDeclaration",
                  "scope": 978,
                  "src": "808:36:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                    "typeString": "contract ERC20SaleWidgetRenderer[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 966,
                      "name": "ERC20SaleWidgetRenderer",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1174,
                      "src": "808:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                        "typeString": "contract ERC20SaleWidgetRenderer"
                      }
                    },
                    "id": 967,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "808:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                      "typeString": "contract ERC20SaleWidgetRenderer[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "807:38:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 972,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "863:0:3"
            },
            "scope": 1155,
            "src": "776:136:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 986,
              "nodeType": "Block",
              "src": "984:50:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 983,
                      "name": "userWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 929,
                      "src": "1001:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 984,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1001:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 982,
                  "id": 985,
                  "nodeType": "Return",
                  "src": "994:33:3"
                }
              ]
            },
            "documentation": null,
            "id": 987,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "numberOfUserWidgetRenderers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 979,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "954:2:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 987,
                  "src": "978:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 980,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "978:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "977:6:3"
            },
            "scope": 1155,
            "src": "918:116:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 998,
              "nodeType": "Block",
              "src": "1131:50:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 994,
                      "name": "userWidgetRenderers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 929,
                      "src": "1148:19:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                        "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                      }
                    },
                    "id": 996,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 995,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 989,
                      "src": "1168:5:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1148:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "functionReturnParameters": 993,
                  "id": 997,
                  "nodeType": "Return",
                  "src": "1141:33:3"
                }
              ]
            },
            "documentation": null,
            "id": 999,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getUserWidgetRendererAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 989,
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 999,
                  "src": "1073:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 988,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1073:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1072:12:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 992,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 999,
                  "src": "1106:23:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                    "typeString": "contract ERC20SaleWidgetRenderer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 991,
                    "name": "ERC20SaleWidgetRenderer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1174,
                    "src": "1106:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                      "typeString": "contract ERC20SaleWidgetRenderer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1105:25:3"
            },
            "scope": 1155,
            "src": "1040:141:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1010,
              "nodeType": "Block",
              "src": "1266:43:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1008,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1006,
                      "name": "inputsRenderer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 931,
                      "src": "1276:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                        "typeString": "contract ERC20SaleInputsRenderer"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1007,
                      "name": "_renderer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1001,
                      "src": "1293:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                        "typeString": "contract ERC20SaleInputsRenderer"
                      }
                    },
                    "src": "1276:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                      "typeString": "contract ERC20SaleInputsRenderer"
                    }
                  },
                  "id": 1009,
                  "nodeType": "ExpressionStatement",
                  "src": "1276:26:3"
                }
              ]
            },
            "documentation": null,
            "id": 1011,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 1004,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1003,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 5303,
                  "src": "1249:9:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1249:9:3"
              }
            ],
            "name": "setInputsRenderer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1002,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1001,
                  "name": "_renderer",
                  "nodeType": "VariableDeclaration",
                  "scope": 1011,
                  "src": "1214:33:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                    "typeString": "contract ERC20SaleInputsRenderer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1000,
                    "name": "ERC20SaleInputsRenderer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 914,
                    "src": "1214:23:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                      "typeString": "contract ERC20SaleInputsRenderer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1213:35:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1266:0:3"
            },
            "scope": 1155,
            "src": "1187:122:3",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1026,
              "nodeType": "Block",
              "src": "1410:70:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1021,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1013,
                        "src": "1436:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1022,
                        "name": "_sale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1015,
                        "src": "1445:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1023,
                        "name": "adminWidgetRenderers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 926,
                        "src": "1452:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        },
                        {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      ],
                      "id": 1020,
                      "name": "_widgets",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1138,
                      "src": "1427:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$_t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (string memory,contract ERC20Sale,contract ERC20SaleWidgetRenderer[] memory) view returns (string memory)"
                      }
                    },
                    "id": 1024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1427:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1019,
                  "id": 1025,
                  "nodeType": "Return",
                  "src": "1420:53:3"
                }
              ]
            },
            "documentation": null,
            "id": 1027,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "adminWidgets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1013,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "1337:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1012,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1337:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1015,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "1353:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1014,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "1353:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1336:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1018,
                  "name": "jsonObject",
                  "nodeType": "VariableDeclaration",
                  "scope": 1027,
                  "src": "1391:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1017,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1391:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1390:19:3"
            },
            "scope": 1155,
            "src": "1315:165:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1042,
              "nodeType": "Block",
              "src": "1580:69:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1037,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1029,
                        "src": "1606:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1038,
                        "name": "_sale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1031,
                        "src": "1615:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1039,
                        "name": "userWidgetRenderers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 929,
                        "src": "1622:19:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        },
                        {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage",
                          "typeString": "contract ERC20SaleWidgetRenderer[] storage ref"
                        }
                      ],
                      "id": 1036,
                      "name": "_widgets",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1138,
                      "src": "1597:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$_t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (string memory,contract ERC20Sale,contract ERC20SaleWidgetRenderer[] memory) view returns (string memory)"
                      }
                    },
                    "id": 1040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1597:45:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1035,
                  "id": 1041,
                  "nodeType": "Return",
                  "src": "1590:52:3"
                }
              ]
            },
            "documentation": null,
            "id": 1043,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "userWidgets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1029,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "1507:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1028,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1507:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1031,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "1523:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1030,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "1523:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1506:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1034,
                  "name": "jsonObject",
                  "nodeType": "VariableDeclaration",
                  "scope": 1043,
                  "src": "1561:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1033,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1561:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1560:19:3"
            },
            "scope": 1155,
            "src": "1486:163:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1137,
              "nodeType": "Block",
              "src": "1779:589:3",
              "statements": [
                {
                  "assignments": [
                    1056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1056,
                      "name": "json",
                      "nodeType": "VariableDeclaration",
                      "scope": 1138,
                      "src": "1789:18:3",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1055,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "1789:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1058,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "5b",
                    "id": 1057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1810:3:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_9f50164828976b6baa479ea39c718c745bbc0d2521b67dfde8474cbdc9711057",
                      "typeString": "literal_string \"[\""
                    },
                    "value": "["
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1789:24:3"
                },
                {
                  "assignments": [
                    1060
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1060,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 1138,
                      "src": "1823:11:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1059,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "1823:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1062,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 1061,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1837:1:3",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1823:15:3"
                },
                {
                  "body": {
                    "id": 1126,
                    "nodeType": "Block",
                    "src": "1898:411:3",
                    "statements": [
                      {
                        "assignments": [
                          1075
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1075,
                            "name": "renderer",
                            "nodeType": "VariableDeclaration",
                            "scope": 1138,
                            "src": "1912:32:3",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                              "typeString": "contract ERC20SaleWidgetRenderer"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1074,
                              "name": "ERC20SaleWidgetRenderer",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 1174,
                              "src": "1912:23:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                                "typeString": "contract ERC20SaleWidgetRenderer"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1079,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1076,
                            "name": "_widgetRenderes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1050,
                            "src": "1947:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                              "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                            }
                          },
                          "id": 1078,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1077,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1064,
                            "src": "1963:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1947:18:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                            "typeString": "contract ERC20SaleWidgetRenderer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1912:53:3"
                      },
                      {
                        "assignments": [
                          1081
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1081,
                            "name": "widget",
                            "nodeType": "VariableDeclaration",
                            "scope": 1138,
                            "src": "1979:20:3",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 1080,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "1979:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1087,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1084,
                              "name": "_locale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1045,
                              "src": "2018:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1085,
                              "name": "_sale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1047,
                              "src": "2027:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20Sale_$386",
                                "typeString": "contract ERC20Sale"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_contract$_ERC20Sale_$386",
                                "typeString": "contract ERC20Sale"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1082,
                              "name": "renderer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1075,
                              "src": "2002:8:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                                "typeString": "contract ERC20SaleWidgetRenderer"
                              }
                            },
                            "id": 1083,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "render",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1173,
                            "src": "2002:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (string memory,contract ERC20Sale) view external returns (string memory)"
                            }
                          },
                          "id": 1086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2002:31:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1979:54:3"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1093,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1089,
                                  "name": "widget",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1081,
                                  "src": "2057:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "id": 1088,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2051:5:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": "bytes"
                              },
                              "id": 1090,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2051:13:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 1091,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2051:20:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1092,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2074:1:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2051:24:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1125,
                        "nodeType": "IfStatement",
                        "src": "2047:252:3",
                        "trueBody": {
                          "id": 1124,
                          "nodeType": "Block",
                          "src": "2077:222:3",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1096,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 1094,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1060,
                                  "src": "2099:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 1095,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2108:1:3",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2099:10:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 1109,
                              "nodeType": "IfStatement",
                              "src": "2095:100:3",
                              "trueBody": {
                                "id": 1108,
                                "nodeType": "Block",
                                "src": "2111:84:3",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1106,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 1097,
                                        "name": "json",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1056,
                                        "src": "2133:4:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                              "argumentTypes": [],
                                              "expression": {
                                                "argumentTypes": null,
                                                "hexValue": "2c",
                                                "id": 1102,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "2162:3:3",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_stringliteral_3e7a35b97029f9e0cf6effd71c1a7958822e9a217d3a3aec886668a7dd8231cb",
                                                  "typeString": "literal_string \",\""
                                                },
                                                "value": ","
                                              },
                                              "id": 1103,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "toSlice",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2705,
                                              "src": "2162:11:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                                "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                              }
                                            },
                                            "id": 1104,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2162:13:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                              "argumentTypes": [],
                                              "expression": {
                                                "argumentTypes": null,
                                                "id": 1098,
                                                "name": "json",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1056,
                                                "src": "2140:4:3",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_string_memory_ptr",
                                                  "typeString": "string memory"
                                                }
                                              },
                                              "id": 1099,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "toSlice",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2705,
                                              "src": "2140:12:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                                "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                              }
                                            },
                                            "id": 1100,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "2140:14:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          },
                                          "id": 1101,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "concat",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 4218,
                                          "src": "2140:21:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2645_memory_ptr_$_t_struct$_slice_$2645_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2645_memory_ptr_$",
                                            "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                                          }
                                        },
                                        "id": 1105,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2140:36:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      },
                                      "src": "2133:43:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    },
                                    "id": 1107,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2133:43:3"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1119,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1110,
                                  "name": "json",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1056,
                                  "src": "2212:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1115,
                                          "name": "widget",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1081,
                                          "src": "2241:6:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        },
                                        "id": 1116,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "toSlice",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2705,
                                        "src": "2241:14:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                        }
                                      },
                                      "id": 1117,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2241:16:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [],
                                      "expression": {
                                        "argumentTypes": [],
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1111,
                                          "name": "json",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1056,
                                          "src": "2219:4:3",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        },
                                        "id": 1112,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "toSlice",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2705,
                                        "src": "2219:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                                          "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                                        }
                                      },
                                      "id": 1113,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2219:14:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 1114,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "concat",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4218,
                                    "src": "2219:21:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2645_memory_ptr_$_t_struct$_slice_$2645_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2645_memory_ptr_$",
                                      "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                                    }
                                  },
                                  "id": 1118,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2219:39:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                "src": "2212:46:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              },
                              "id": 1120,
                              "nodeType": "ExpressionStatement",
                              "src": "2212:46:3"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1122,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2276:8:3",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 1121,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1060,
                                  "src": "2276:6:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1123,
                              "nodeType": "ExpressionStatement",
                              "src": "2276:8:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1067,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1064,
                      "src": "1865:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1068,
                        "name": "_widgetRenderes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1050,
                        "src": "1869:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                          "typeString": "contract ERC20SaleWidgetRenderer[] memory"
                        }
                      },
                      "id": 1069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1869:22:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1865:26:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1127,
                  "initializationExpression": {
                    "assignments": [
                      1064
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1064,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1138,
                        "src": "1853:6:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1063,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "1853:4:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1066,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1065,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1862:1:3",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "1853:10:3"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "1893:3:3",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1071,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1064,
                        "src": "1893:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1073,
                    "nodeType": "ExpressionStatement",
                    "src": "1893:3:3"
                  },
                  "nodeType": "ForStatement",
                  "src": "1848:461:3"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "hexValue": "5d",
                            "id": 1132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2347:3:3",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_b36bcf9cc1d9e7f60b1f757ebd8b4694b17fc592b16065d243c43b09fde00b29",
                              "typeString": "literal_string \"]\""
                            },
                            "value": "]"
                          },
                          "id": 1133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toSlice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2705,
                          "src": "2347:11:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                          }
                        },
                        "id": 1134,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2347:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1128,
                            "name": "json",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1056,
                            "src": "2325:4:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "id": 1129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "toSlice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2705,
                          "src": "2325:12:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_struct$_slice_$2645_memory_ptr_$bound_to$_t_string_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (struct strings.slice memory)"
                          }
                        },
                        "id": 1130,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2325:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$2645_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1131,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "concat",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4218,
                      "src": "2325:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$2645_memory_ptr_$_t_struct$_slice_$2645_memory_ptr_$returns$_t_string_memory_ptr_$bound_to$_t_struct$_slice_$2645_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (string memory)"
                      }
                    },
                    "id": 1135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2325:36:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1054,
                  "id": 1136,
                  "nodeType": "Return",
                  "src": "2318:43:3"
                }
              ]
            },
            "documentation": null,
            "id": 1138,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_widgets",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1051,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1045,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1673:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1044,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1673:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1047,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1689:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1046,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "1689:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1050,
                  "name": "_widgetRenderes",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1706:41:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_memory_ptr",
                    "typeString": "contract ERC20SaleWidgetRenderer[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 1048,
                      "name": "ERC20SaleWidgetRenderer",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1174,
                      "src": "1706:23:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ERC20SaleWidgetRenderer_$1174",
                        "typeString": "contract ERC20SaleWidgetRenderer"
                      }
                    },
                    "id": 1049,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "1706:25:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_contract$_ERC20SaleWidgetRenderer_$1174_$dyn_storage_ptr",
                      "typeString": "contract ERC20SaleWidgetRenderer[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1672:76:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1053,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1138,
                  "src": "1771:6:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1052,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1771:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1770:8:3"
            },
            "scope": 1155,
            "src": "1655:713:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1153,
              "nodeType": "Block",
              "src": "2462:61:3",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1149,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1140,
                        "src": "2501:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1150,
                        "name": "_sale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1142,
                        "src": "2510:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_contract$_ERC20Sale_$386",
                          "typeString": "contract ERC20Sale"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1147,
                        "name": "inputsRenderer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 931,
                        "src": "2479:14:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20SaleInputsRenderer_$914",
                          "typeString": "contract ERC20SaleInputsRenderer"
                        }
                      },
                      "id": 1148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "render",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 913,
                      "src": "2479:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_contract$_ERC20Sale_$386_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (string memory,contract ERC20Sale) view external returns (string memory)"
                      }
                    },
                    "id": 1151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2479:37:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1146,
                  "id": 1152,
                  "nodeType": "Return",
                  "src": "2472:44:3"
                }
              ]
            },
            "documentation": null,
            "id": 1154,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "inputs",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1143,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1140,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1154,
                  "src": "2390:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1139,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2390:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1142,
                  "name": "_sale",
                  "nodeType": "VariableDeclaration",
                  "scope": 1154,
                  "src": "2406:15:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20Sale_$386",
                    "typeString": "contract ERC20Sale"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1141,
                    "name": "ERC20Sale",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 386,
                    "src": "2406:9:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20Sale_$386",
                      "typeString": "contract ERC20Sale"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2389:33:3"
            },
            "payable": false,
            "returnParameters": {
              "id": 1146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1145,
                  "name": "jsonArray",
                  "nodeType": "VariableDeclaration",
                  "scope": 1154,
                  "src": "2444:16:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1144,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2444:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2443:18:3"
            },
            "scope": 1155,
            "src": "2374:149:3",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1156,
        "src": "134:2391:3"
      }
    ],
    "src": "0:2526:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {
    "1": {
      "events": {},
      "links": {},
      "address": "0x728f1491c644e47c0096671e2b83fc5dbf0ff2bc",
      "transactionHash": null
    },
    "3": {
      "events": {},
      "links": {},
      "address": "0x2cbe84b7be5189d079dc314c2715332b501198e1",
      "transactionHash": "0x88f68a2928ed422923d976fdc66ca7e0fc19e9d70ace7c660a8128631adb4a14"
    }
  },
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-11-01T09:28:40.944Z"
}