{
  "contractName": "Template",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "_interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "InterfaceId_ERC165",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "beneficiary",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "bytecodeHash",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "InterfaceId_Template",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "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": true,
      "inputs": [],
      "name": "price",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_bytecodeHash",
          "type": "bytes32"
        },
        {
          "name": "_price",
          "type": "uint256"
        },
        {
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "Instantiated",
      "type": "event"
    },
    {
      "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": true,
      "inputs": [
        {
          "name": "_locale",
          "type": "string"
        }
      ],
      "name": "name",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_locale",
          "type": "string"
        }
      ],
      "name": "description",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_locale",
          "type": "string"
        },
        {
          "name": "_name",
          "type": "string"
        },
        {
          "name": "_description",
          "type": "string"
        }
      ],
      "name": "setNameAndDescription",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_bytecode",
          "type": "bytes"
        },
        {
          "name": "_args",
          "type": "bytes"
        }
      ],
      "name": "instantiate",
      "outputs": [
        {
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50604051606080610e5283398101604090815281516020830151919092015160008054600160a060020a031916331790556100737f01ffc9a7000000000000000000000000000000000000000000000000000000006401000000006100f2810204565b6004839055600582905560068054600160a060020a031916600160a060020a03831617905560008211156100b857600654600160a060020a031615156100b857600080fd5b6100ea7fd48445ff000000000000000000000000000000000000000000000000000000006401000000006100f2810204565b505050610161565b7fffffffff00000000000000000000000000000000000000000000000000000000808216141561012157600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600160208190526040909120805460ff19169091179055565b610ce2806101706000396000f3006080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100c957806319fa8f501461011457806338af3eed1461015b578063420c6a2c1461018c5780635b43bc99146101b35780636535b4a5146102815780636e63d1091461030b578063715018a61461032057806388255199146103375780638da5cb5b14610390578063a035b1fe146103a5578063b649c913146103ba578063f2fde38b1461048f575b600080fd5b3480156100d557600080fd5b506101007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600435166104b0565b604080519115158252519081900360200190f35b34801561012057600080fd5b506101296104e4565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b34801561016757600080fd5b50610170610508565b60408051600160a060020a039092168252519081900360200190f35b34801561019857600080fd5b506101a1610517565b60408051918252519081900360200190f35b3480156101bf57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261020c94369492936024939284019190819084018382808284375094975061051d9650505050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024657818101518382015260200161022e565b50505050905090810190601f1680156102735780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6040805160206004803580820135601f810184900484028501840190955284845261017094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506106119650505050505050565b34801561031757600080fd5b5061012961099d565b34801561032c57600080fd5b506103356109c1565b005b34801561034357600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261020c943694929360249392840191908190840183828082843750949750610a2d9650505050505050565b34801561039c57600080fd5b50610170610a60565b3480156103b157600080fd5b506101a1610a6f565b3480156103c657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261033594369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610a759650505050505050565b34801561049b57600080fd5b50610335600160a060020a0360043516610b7b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526001602052604090205460ff1690565b7f01ffc9a70000000000000000000000000000000000000000000000000000000081565b600654600160a060020a031681565b60045481565b60606002826040518082805190602001908083835b602083106105515780518252601f199092019160209182019101610532565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156106055780601f106105da57610100808354040283529160200191610605565b820191906000526020600020905b8154815290600101906020018083116105e857829003601f168201915b50505050509050919050565b600060606000846040518082805190602001908083835b602083106106475780518252601f199092019160209182019101610628565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060045414925061068291505057600080fd5b84846040516020018083805190602001908083835b602083106106b65780518252601f199092019160209182019101610697565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106106fe5780518252601f1990920191602091820191016106df565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291508151602083016000f09250600160a060020a03831615156107b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e6e6f7420696e7374616e746961746520636f6e74726163740000000000604482015290519081900360640190fd5b50604080517f01ffc9a700000000000000000000000000000000000000000000000000000000808252600482015290518391600160a060020a038316916301ffc9a7916024808201926020929091908290030181600087803b15801561081c57600080fd5b505af1158015610830573d6000803e3d6000fd5b505050506040513d602081101561084657600080fd5b5051151561085357600080fd5b604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f6125ede50000000000000000000000000000000000000000000000000000000060048201529051600160a060020a038316916301ffc9a79160248083019260209291908290030181600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d60208110156108fe57600080fd5b5051151561090b57600080fd5b6000600554111561095f57600554341461092457600080fd5b600654604051600160a060020a03909116903480156108fc02916000818181858888f1935050505015801561095d573d6000803e3d6000fd5b505b604051600160a060020a0384169033907f4b9699a19830f077a7203307c78b030d114793c7d90c38f8293304371864b5e190600090a3505092915050565b7fd48445ff0000000000000000000000000000000000000000000000000000000081565b600054600160a060020a031633146109d857600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6060600382604051808280519060200190808383602083106105515780518252601f199092019160209182019101610532565b600054600160a060020a031681565b60055481565b600054600160a060020a03163314610a8c57600080fd5b816002846040518082805190602001908083835b60208310610abf5780518252601f199092019160209182019101610aa0565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381019093208451610b009591949190910192509050610c1b565b50806003846040518082805190602001908083835b60208310610b345780518252601f199092019160209182019101610b15565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381019093208451610b759591949190910192509050610c1b565b50505050565b600054600160a060020a03163314610b9257600080fd5b610b9b81610b9e565b50565b600160a060020a0381161515610bb357600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5c57805160ff1916838001178555610c89565b82800160010185558215610c89579182015b82811115610c89578251825591602001919060010190610c6e565b50610c95929150610c99565b5090565b610cb391905b80821115610c955760008155600101610c9f565b905600a165627a7a723058204ac016c3897ba57b0f7023e58187ac6e27ab829f1ba984143fda0987eb39f91c0029",
  "deployedBytecode": "0x6080604052600436106100c45763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146100c957806319fa8f501461011457806338af3eed1461015b578063420c6a2c1461018c5780635b43bc99146101b35780636535b4a5146102815780636e63d1091461030b578063715018a61461032057806388255199146103375780638da5cb5b14610390578063a035b1fe146103a5578063b649c913146103ba578063f2fde38b1461048f575b600080fd5b3480156100d557600080fd5b506101007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19600435166104b0565b604080519115158252519081900360200190f35b34801561012057600080fd5b506101296104e4565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b34801561016757600080fd5b50610170610508565b60408051600160a060020a039092168252519081900360200190f35b34801561019857600080fd5b506101a1610517565b60408051918252519081900360200190f35b3480156101bf57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261020c94369492936024939284019190819084018382808284375094975061051d9650505050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024657818101518382015260200161022e565b50505050905090810190601f1680156102735780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6040805160206004803580820135601f810184900484028501840190955284845261017094369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506106119650505050505050565b34801561031757600080fd5b5061012961099d565b34801561032c57600080fd5b506103356109c1565b005b34801561034357600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261020c943694929360249392840191908190840183828082843750949750610a2d9650505050505050565b34801561039c57600080fd5b50610170610a60565b3480156103b157600080fd5b506101a1610a6f565b3480156103c657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261033594369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610a759650505050505050565b34801561049b57600080fd5b50610335600160a060020a0360043516610b7b565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526001602052604090205460ff1690565b7f01ffc9a70000000000000000000000000000000000000000000000000000000081565b600654600160a060020a031681565b60045481565b60606002826040518082805190602001908083835b602083106105515780518252601f199092019160209182019101610532565b518151600019602094850361010090810a820192831692199390931691909117909252949092019687526040805197889003820188208054601f60026001831615909802909501169590950492830182900482028801820190528187529294509250508301828280156106055780601f106105da57610100808354040283529160200191610605565b820191906000526020600020905b8154815290600101906020018083116105e857829003601f168201915b50505050509050919050565b600060606000846040518082805190602001908083835b602083106106475780518252601f199092019160209182019101610628565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912060045414925061068291505057600080fd5b84846040516020018083805190602001908083835b602083106106b65780518252601f199092019160209182019101610697565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106106fe5780518252601f1990920191602091820191016106df565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405291508151602083016000f09250600160a060020a03831615156107b757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f43616e6e6f7420696e7374616e746961746520636f6e74726163740000000000604482015290519081900360640190fd5b50604080517f01ffc9a700000000000000000000000000000000000000000000000000000000808252600482015290518391600160a060020a038316916301ffc9a7916024808201926020929091908290030181600087803b15801561081c57600080fd5b505af1158015610830573d6000803e3d6000fd5b505050506040513d602081101561084657600080fd5b5051151561085357600080fd5b604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f6125ede50000000000000000000000000000000000000000000000000000000060048201529051600160a060020a038316916301ffc9a79160248083019260209291908290030181600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d60208110156108fe57600080fd5b5051151561090b57600080fd5b6000600554111561095f57600554341461092457600080fd5b600654604051600160a060020a03909116903480156108fc02916000818181858888f1935050505015801561095d573d6000803e3d6000fd5b505b604051600160a060020a0384169033907f4b9699a19830f077a7203307c78b030d114793c7d90c38f8293304371864b5e190600090a3505092915050565b7fd48445ff0000000000000000000000000000000000000000000000000000000081565b600054600160a060020a031633146109d857600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6060600382604051808280519060200190808383602083106105515780518252601f199092019160209182019101610532565b600054600160a060020a031681565b60055481565b600054600160a060020a03163314610a8c57600080fd5b816002846040518082805190602001908083835b60208310610abf5780518252601f199092019160209182019101610aa0565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381019093208451610b009591949190910192509050610c1b565b50806003846040518082805190602001908083835b60208310610b345780518252601f199092019160209182019101610b15565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381019093208451610b759591949190910192509050610c1b565b50505050565b600054600160a060020a03163314610b9257600080fd5b610b9b81610b9e565b50565b600160a060020a0381161515610bb357600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610c5c57805160ff1916838001178555610c89565b82800160010185558215610c89579182015b82811115610c89578251825591602001919060010190610c6e565b50610c95929150610c99565b5090565b610cb391905b80821115610c955760008155600101610c9f565b905600a165627a7a723058204ac016c3897ba57b0f7023e58187ac6e27ab829f1ba984143fda0987eb39f91c0029",
  "sourceMap": "287:3683:5:-;;;1474:346;8:9:-1;5:2;;;30:1;27;20:12;5:2;1474:346:5;;;;;;;;;;;;;;;;;;;;;;;;;567:5:21;:18;;-1:-1:-1;;;;;;567:18:21;575:10;567:18;;;649:38:18;668:18;649;;;;:38;:::i;:::-;1591:12:5;:28;;;1629:5;:14;;;1653:11;:26;;-1:-1:-1;;;;;;1653:26:5;-1:-1:-1;;;;;1653:26:5;;;;;-1:-1:-1;1693:9:5;;1689:74;;;1726:11;;-1:-1:-1;;;;;1726:11:5;:25;;1718:34;;;;;;1773:40;1792:20;1773:18;;;;:40;:::i;:::-;1474:346;;;287:3683;;987:156:18;1065:26;;;;;;1057:35;;;;;;1098:33;;;;;;1134:4;1098:33;;;;;;;;:40;;-1:-1:-1;;1098:40:18;;;;;;987:156::o;287:3683:5:-;;;;;;;",
  "deployedSourceMap": "287:3683:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;775:142:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;775:142:18;-1:-1:-1;;775:142:18;;;;;;;;;;;;;;;;;;;;;;;230:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;230:54:18;;;;;;;;-1:-1:-1;;230:54:18;;;;;;;;;;;;;;1095:26:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1095:26:5;;;;;;;;-1:-1:-1;;;;;1095:26:5;;;;;;;;;;;;;;918:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;918:27:5;;;;;;;;;;;;;;;;;;;;1965:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1965:104:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1965:104:5;;-1:-1:-1;1965:104:5;;-1:-1:-1;;;;;;;1965:104:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1965:104:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3079:889;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3079:889:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3079:889:5;;;;-1:-1:-1;3079:889:5;-1:-1:-1;3079:889:5;;-1:-1:-1;3079:889:5;;;;;;;;-1:-1:-1;3079:889:5;;-1:-1:-1;3079:889:5;;-1:-1:-1;;;;;;;3079:889:5;688:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;688:56:5;;;;1001:111:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1001:111:21;;;;;;2221:118:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2221:118:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2221:118:5;;-1:-1:-1;2221:118:5;;-1:-1:-1;;;;;;;2221:118:5;238:20:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:21;;;;1014:17:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1014:17:5;;;;2528:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2528:198:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2528:198:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2528:198:5;;;;-1:-1:-1;2528:198:5;-1:-1:-1;2528:198:5;;-1:-1:-1;2528:198:5;;;;;;;;-1:-1:-1;;2528:198:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2528:198:5;;;;-1:-1:-1;2528:198:5;-1:-1:-1;2528:198:5;;-1:-1:-1;2528:198:5;;;;;;;;-1:-1:-1;2528:198:5;;-1:-1:-1;2528:198:5;;-1:-1:-1;;;;;;;2528:198:5;1274:103:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1274:103:21;-1:-1:-1;;;;;1274:103:21;;;;;775:142:18;-1:-1:-1;;879:33:18;858:4;879:33;;;:19;:33;;;;;;;;;775:142::o;230:54::-;;;:::o;1095:26:5:-;;;-1:-1:-1;;;;;1095:26:5;;:::o;918:27::-;;;;:::o;1965:104::-;2016:6;2041:12;2054:7;2041:21;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;-1:-1;;263:2;259:12;;;254:3;250:22;;;246:30;;340:21;;;311:9;;295:26;;;;377:20;;;;365:33;;;2041:21:5;;;;;;;;;;;;;;;;;;2034:28;;;;274:1:-1;2034:28:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2041:21;;-1:-1:-1;2034:28:5;-1:-1:-1;;2034:28:5;;2041:21;2034:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1965:104;;;:::o;3079:889::-;3154:23;3244:21;3537:10;3223:9;3213:20;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;3213:20:5;;;;;;;;;;3197:12;;:36;;-1:-1:-1;3189:45:5;;-1:-1:-1;;3189:45:5;;;;;3285:9;3296:5;3268:34;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;3268:34:5;;;;;;;;;;-1:-1:-1;3268:34:5;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3268:34:5;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3268:34:5;;;3244:58;;3391:8;3385:15;3378:4;3368:8;3364:19;3361:1;3354:47;3335:66;-1:-1:-1;;;;;;3424:29:5;;;3420:542;;;3469:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:542;-1:-1:-1;3631:31:5;;;;;;;;;;;;;3559:15;;-1:-1:-1;;;;;3631:19:5;;;;;:31;;;;;;;;;;;;;;;-1:-1:-1;3631:19:5;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;3631:31:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3631:31:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3631:31:5;3623:40;;;;;;;;3721:31;;;;;;;;;;;;;-1:-1:-1;;;;;3721:19:5;;;;;:31;;;;;;;;;;;;;;-1:-1:-1;3721:19:5;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;3721:31:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3721:31:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3721:31:5;3713:40;;;;;;;;3780:1;3772:5;;:9;3768:124;;;3822:5;;3809:9;:18;3801:27;;;;;;3846:11;;:31;;-1:-1:-1;;;;;3846:11:5;;;;3867:9;3846:31;;;;;:11;:31;:11;:31;3867:9;3846:11;:31;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3846:31:5;3768:124;3910:41;;-1:-1:-1;;;;;3910:41:5;;;3923:10;;3910:41;;;;;3079:889;;;;;;:::o;688:56::-;;;:::o;1001:111:21:-;719:5;;-1:-1:-1;;;;;719:5:21;705:10;:19;697:28;;;;;;1077:5;;;1058:25;;-1:-1:-1;;;;;1077:5:21;;;;1058:25;;;1105:1;1089:18;;-1:-1:-1;;1089:18:21;;;1001:111::o;2221:118:5:-;2279:6;2304:19;2324:7;2304:28;;;;;;;;;;;;;66:2:-1;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;238:20:21;;;-1:-1:-1;;;;;238:20:21;;:::o;1014:17:5:-;;;;:::o;2528:198::-;719:5:21;;-1:-1:-1;;;;;719:5:21;705:10;:19;697:28;;;;;;2661:5:5;2637:12;2650:7;2637:21;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2637:21:5;;;;;-1:-1:-1;2637:21:5;;;;;;;;;;;:29;;;;:21;;:29;;;;;-1:-1:-1;2637:29:5;-1:-1:-1;2637:29:5;:::i;:::-;;2707:12;2676:19;2696:7;2676:28;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;2676:28:5;;;;;-1:-1:-1;2676:28:5;;;;;;;;;;;:43;;;;:28;;:43;;;;;-1:-1:-1;2676:43:5;-1:-1:-1;2676:43:5;:::i;:::-;;2528:198;;;:::o;1274:103:21:-;719:5;;-1:-1:-1;;;;;719:5:21;705:10;:19;697:28;;;;;;1343:29;1362:9;1343:18;:29::i;:::-;1274:103;:::o;1512:171::-;-1:-1:-1;;;;;1582:23:21;;;;1574:32;;;;;;1638:5;;;1617:38;;-1:-1:-1;;;;;1617:38:21;;;;1638:5;;;1617:38;;;1661:5;:17;;-1:-1:-1;;1661:17:21;-1:-1:-1;;;;;1661:17:21;;;;;;;;;;1512:171::o;287:3683:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;287:3683:5;;;-1:-1:-1;287:3683:5;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"zeppelin-solidity/contracts/ownership/Ownable.sol\";\nimport \"zeppelin-solidity/contracts/introspection/SupportsInterfaceWithLookup.sol\";\nimport \"../Contract.sol\";\n\n/**\n * @title Template\n * @notice Template instantiates `Contract`s of the same form.\n */\ncontract Template is Ownable, SupportsInterfaceWithLookup {\n    /**\n     * @notice this.owner.selector ^ this.renounceOwnership.selector ^ this.transferOwnership.selector\n        ^ this.bytecodeHash.selector ^ this.price.selector ^ this.beneficiary.selector\n        ^ this.name.selector ^ this.description.selector ^ this.setNameAndDescription.selector\n        ^ this.instantiate.selector\n     */\n    bytes4 public constant InterfaceId_Template = 0xd48445ff;\n\n    mapping(string => string) nameOfLocale;\n    mapping(string => string) descriptionOfLocale;\n    /**\n     * @notice Hash of EVM bytecode to be instantiated.\n     */\n    bytes32 public bytecodeHash;\n    /**\n     * @notice Price to pay when instantiating\n     */\n    uint public price;\n    /**\n     * @notice Address to receive payment\n     */\n    address public beneficiary;\n\n    /**\n     * @notice Logged when a new `Contract` instantiated.\n     */\n    event Instantiated(address indexed creator, address indexed contractAddress);\n\n    /**\n     * @param _bytecodeHash Hash of EVM bytecode\n     * @param _price Price of instantiating in wei\n     * @param _beneficiary Address to transfer _price when instantiating\n     */\n    constructor(\n        bytes32 _bytecodeHash,\n        uint _price,\n        address _beneficiary\n    ) public {\n        bytecodeHash = _bytecodeHash;\n        price = _price;\n        beneficiary = _beneficiary;\n        if (price > 0) {\n            require(beneficiary != address(0));\n        }\n\n        _registerInterface(InterfaceId_Template);\n    }\n\n    /**\n     * @param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n     * @return Name in `_locale`.\n     */\n    function name(string _locale) public view returns (string) {\n        return nameOfLocale[_locale];\n    }\n\n    /**\n     * @param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n     * @return Description in `_locale`.\n     */\n    function description(string _locale) public view returns (string) {\n        return descriptionOfLocale[_locale];\n    }\n\n    /**\n     * @param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n     * @param _name Name to set\n     * @param _description Description to set\n     */\n    function setNameAndDescription(string _locale, string _name, string _description) public onlyOwner {\n        nameOfLocale[_locale] = _name;\n        descriptionOfLocale[_locale] = _description;\n    }\n\n    /**\n     * @notice `msg.sender` is passed as first argument for the newly created `Contract`.\n     * @param _bytecode Bytecode corresponding to `bytecodeHash`\n     * @param _args If arguments where passed to this function, those will be appended to the arguments for `Contract`.\n     * @return Newly created contract account's address\n     */\n    function instantiate(bytes _bytecode, bytes _args) public payable returns (address contractAddress) {\n        require(bytecodeHash == keccak256(_bytecode));\n        bytes memory calldata = abi.encodePacked(_bytecode, _args);\n        assembly {\n            contractAddress := create(0, add(calldata, 0x20), mload(calldata))\n        }\n        if (contractAddress == address(0)) {\n            revert(\"Cannot instantiate contract\");\n        } else {\n            Contract c = Contract(contractAddress);\n            // InterfaceId_ERC165\n            require(c.supportsInterface(0x01ffc9a7));\n            // InterfaceId_Contract\n            require(c.supportsInterface(0x6125ede5));\n\n            if (price > 0) {\n                require(msg.value == price);\n                beneficiary.transfer(msg.value);\n            }\n            emit Instantiated(msg.sender, contractAddress);\n        }\n    }\n}\n",
  "sourcePath": "tokenboost-solidity/contracts/template/Template.sol",
  "ast": {
    "absolutePath": "tokenboost-solidity/contracts/template/Template.sol",
    "exportedSymbols": {
      "Template": [
        760
      ]
    },
    "id": 761,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 558,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:5"
      },
      {
        "absolutePath": "zeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "zeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 559,
        "nodeType": "ImportDirective",
        "scope": 761,
        "sourceUnit": 4123,
        "src": "26:59:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "zeppelin-solidity/contracts/introspection/SupportsInterfaceWithLookup.sol",
        "file": "zeppelin-solidity/contracts/introspection/SupportsInterfaceWithLookup.sol",
        "id": 560,
        "nodeType": "ImportDirective",
        "scope": 761,
        "sourceUnit": 3883,
        "src": "86:83:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "tokenboost-solidity/contracts/Contract.sol",
        "file": "../Contract.sol",
        "id": 561,
        "nodeType": "ImportDirective",
        "scope": 761,
        "sourceUnit": 557,
        "src": "170:25:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 562,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4122,
              "src": "308:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$4122",
                "typeString": "contract Ownable"
              }
            },
            "id": 563,
            "nodeType": "InheritanceSpecifier",
            "src": "308:7:5"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 564,
              "name": "SupportsInterfaceWithLookup",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3882,
              "src": "317:27:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SupportsInterfaceWithLookup_$3882",
                "typeString": "contract SupportsInterfaceWithLookup"
              }
            },
            "id": 565,
            "nodeType": "InheritanceSpecifier",
            "src": "317:27:5"
          }
        ],
        "contractDependencies": [
          3831,
          3882,
          4122
        ],
        "contractKind": "contract",
        "documentation": "@title Template\n@notice Template instantiates `Contract`s of the same form.",
        "fullyImplemented": true,
        "id": 760,
        "linearizedBaseContracts": [
          760,
          3882,
          3831,
          4122
        ],
        "name": "Template",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 568,
            "name": "InterfaceId_Template",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "688:56:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 566,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "688:6:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786434383434356666",
              "id": 567,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "734:10:5",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3565438463_by_1",
                "typeString": "int_const 3565438463"
              },
              "value": "0xd48445ff"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 572,
            "name": "nameOfLocale",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "751:38:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
              "typeString": "mapping(string => string)"
            },
            "typeName": {
              "id": 571,
              "keyType": {
                "id": 569,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "759:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "751:25:5",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                "typeString": "mapping(string => string)"
              },
              "valueType": {
                "id": 570,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "769:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 576,
            "name": "descriptionOfLocale",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "795:45:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
              "typeString": "mapping(string => string)"
            },
            "typeName": {
              "id": 575,
              "keyType": {
                "id": 573,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "803:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "795:25:5",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                "typeString": "mapping(string => string)"
              },
              "valueType": {
                "id": 574,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "813:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 578,
            "name": "bytecodeHash",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "918:27:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 577,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "918:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 580,
            "name": "price",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "1014:17:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 579,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1014:4:5",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 582,
            "name": "beneficiary",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "1095:26:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 581,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1095:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "@notice Logged when a new `Contract` instantiated.",
            "id": 588,
            "name": "Instantiated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 584,
                  "indexed": true,
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 588,
                  "src": "1221:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 583,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1221:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 586,
                  "indexed": true,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 588,
                  "src": "1246:31:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 585,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1246:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1220:58:5"
            },
            "src": "1202:77:5"
          },
          {
            "body": {
              "id": 626,
              "nodeType": "Block",
              "src": "1581:239:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 597,
                      "name": "bytecodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 578,
                      "src": "1591:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 598,
                      "name": "_bytecodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 590,
                      "src": "1606:13:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1591:28:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 600,
                  "nodeType": "ExpressionStatement",
                  "src": "1591:28:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 601,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 580,
                      "src": "1629:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 602,
                      "name": "_price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 592,
                      "src": "1637:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1629:14:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 604,
                  "nodeType": "ExpressionStatement",
                  "src": "1629:14:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 605,
                      "name": "beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 582,
                      "src": "1653:11:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 606,
                      "name": "_beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 594,
                      "src": "1667:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1653:26:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 608,
                  "nodeType": "ExpressionStatement",
                  "src": "1653:26:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 609,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 580,
                      "src": "1693:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1701:1:5",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1693:9:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 621,
                  "nodeType": "IfStatement",
                  "src": "1689:74:5",
                  "trueBody": {
                    "id": 620,
                    "nodeType": "Block",
                    "src": "1704:59:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 613,
                                "name": "beneficiary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 582,
                                "src": "1726:11:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 615,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1749:1:5",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 614,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1741:7:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1741:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1726:25:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 612,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4919,
                              4920
                            ],
                            "referencedDeclaration": 4919,
                            "src": "1718:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1718:34:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 619,
                        "nodeType": "ExpressionStatement",
                        "src": "1718:34:5"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 623,
                        "name": "InterfaceId_Template",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 568,
                        "src": "1792:20:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 622,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3881,
                      "src": "1773:18:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1773:40:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 625,
                  "nodeType": "ExpressionStatement",
                  "src": "1773:40:5"
                }
              ]
            },
            "documentation": "@param _bytecodeHash Hash of EVM bytecode\n@param _price Price of instantiating in wei\n@param _beneficiary Address to transfer _price when instantiating",
            "id": 627,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 595,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 590,
                  "name": "_bytecodeHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "1495:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 589,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1495:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 592,
                  "name": "_price",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "1526:11:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 591,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1526:4:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 594,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "1547:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 593,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1547:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1485:88:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 596,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1581:0:5"
            },
            "scope": 760,
            "src": "1474:346:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 638,
              "nodeType": "Block",
              "src": "2024:45:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 634,
                      "name": "nameOfLocale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 572,
                      "src": "2041:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                        "typeString": "mapping(string memory => string storage ref)"
                      }
                    },
                    "id": 636,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 635,
                      "name": "_locale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 629,
                      "src": "2054:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2041:21:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 633,
                  "id": 637,
                  "nodeType": "Return",
                  "src": "2034:28:5"
                }
              ]
            },
            "documentation": "@param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n@return Name in `_locale`.",
            "id": 639,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 629,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 639,
                  "src": "1979:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 628,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1979:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1978:16:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 632,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 639,
                  "src": "2016:6:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 631,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2016:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2015:8:5"
            },
            "scope": 760,
            "src": "1965:104:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 650,
              "nodeType": "Block",
              "src": "2287:52:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 646,
                      "name": "descriptionOfLocale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 576,
                      "src": "2304:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                        "typeString": "mapping(string memory => string storage ref)"
                      }
                    },
                    "id": 648,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 647,
                      "name": "_locale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 641,
                      "src": "2324:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2304:28:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 645,
                  "id": 649,
                  "nodeType": "Return",
                  "src": "2297:35:5"
                }
              ]
            },
            "documentation": "@param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n@return Description in `_locale`.",
            "id": 651,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "description",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 641,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 651,
                  "src": "2242:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 640,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2242:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2241:16:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 644,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 651,
                  "src": "2279:6:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 643,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2279:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2278:8:5"
            },
            "scope": 760,
            "src": "2221:118:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 674,
              "nodeType": "Block",
              "src": "2627:99:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 662,
                        "name": "nameOfLocale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 572,
                        "src": "2637:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                          "typeString": "mapping(string memory => string storage ref)"
                        }
                      },
                      "id": 664,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 663,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 653,
                        "src": "2650:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2637:21:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 665,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 655,
                      "src": "2661:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2637:29:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 667,
                  "nodeType": "ExpressionStatement",
                  "src": "2637:29:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 668,
                        "name": "descriptionOfLocale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 576,
                        "src": "2676:19:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                          "typeString": "mapping(string memory => string storage ref)"
                        }
                      },
                      "id": 670,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 669,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 653,
                        "src": "2696:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2676:28:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 671,
                      "name": "_description",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 657,
                      "src": "2707:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2676:43:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 673,
                  "nodeType": "ExpressionStatement",
                  "src": "2676:43:5"
                }
              ]
            },
            "documentation": "@param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n@param _name Name to set\n@param _description Description to set",
            "id": 675,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 660,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 659,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4070,
                  "src": "2617:9:5",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2617:9:5"
              }
            ],
            "name": "setNameAndDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 653,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 675,
                  "src": "2559:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 652,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2559:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 655,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 675,
                  "src": "2575:12:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 654,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2575:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 657,
                  "name": "_description",
                  "nodeType": "VariableDeclaration",
                  "scope": 675,
                  "src": "2589:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 656,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2589:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2558:51:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 661,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2627:0:5"
            },
            "scope": 760,
            "src": "2528:198:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 758,
              "nodeType": "Block",
              "src": "3179:789:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 685,
                          "name": "bytecodeHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 578,
                          "src": "3197:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 687,
                              "name": "_bytecode",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 677,
                              "src": "3223:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 686,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4910,
                            "src": "3213:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                              "typeString": "function () pure returns (bytes32)"
                            }
                          },
                          "id": 688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3213:20:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "3197:36:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 684,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4919,
                        4920
                      ],
                      "referencedDeclaration": 4919,
                      "src": "3189:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3189:45:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 691,
                  "nodeType": "ExpressionStatement",
                  "src": "3189:45:5"
                },
                {
                  "assignments": [
                    693
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 693,
                      "name": "calldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 759,
                      "src": "3244:21:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 692,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3244:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 699,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 696,
                        "name": "_bytecode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 677,
                        "src": "3285:9:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 697,
                        "name": "_args",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 679,
                        "src": "3296:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 694,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4903,
                        "src": "3268:3:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3268:16:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3268:34:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3244:58:5"
                },
                {
                  "externalReferences": [
                    {
                      "contractAddress": {
                        "declaration": 682,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3335:15:5",
                        "valueSize": 1
                      }
                    },
                    {
                      "calldata": {
                        "declaration": 693,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3368:8:5",
                        "valueSize": 1
                      }
                    },
                    {
                      "calldata": {
                        "declaration": 693,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3391:8:5",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 700,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    contractAddress := create(0, add(calldata, 0x20), mload(calldata))\n}",
                  "src": "3312:110:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 701,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 682,
                      "src": "3424:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3451:1:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3443:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 704,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3443:10:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3424:29:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 756,
                    "nodeType": "Block",
                    "src": "3523:439:5",
                    "statements": [
                      {
                        "assignments": [
                          712
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 712,
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 759,
                            "src": "3537:10:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Contract_$556",
                              "typeString": "contract Contract"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 711,
                              "name": "Contract",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 556,
                              "src": "3537:8:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Contract_$556",
                                "typeString": "contract Contract"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 716,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 714,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 682,
                              "src": "3559:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 713,
                            "name": "Contract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 556,
                            "src": "3550:8:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Contract_$556_$",
                              "typeString": "type(contract Contract)"
                            }
                          },
                          "id": 715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3550:25:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Contract_$556",
                            "typeString": "contract Contract"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3537:38:5"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783031666663396137",
                                  "id": 720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3651:10:5",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_33540519_by_1",
                                    "typeString": "int_const 33540519"
                                  },
                                  "value": "0x01ffc9a7"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_33540519_by_1",
                                    "typeString": "int_const 33540519"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 718,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 712,
                                  "src": "3631:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Contract_$556",
                                    "typeString": "contract Contract"
                                  }
                                },
                                "id": 719,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "supportsInterface",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3863,
                                "src": "3631:19:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_bytes4_$returns$_t_bool_$",
                                  "typeString": "function (bytes4) view external returns (bool)"
                                }
                              },
                              "id": 721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3631:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 717,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4919,
                              4920
                            ],
                            "referencedDeclaration": 4919,
                            "src": "3623:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3623:40:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 723,
                        "nodeType": "ExpressionStatement",
                        "src": "3623:40:5"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783631323565646535",
                                  "id": 727,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3741:10:5",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1629875685_by_1",
                                    "typeString": "int_const 1629875685"
                                  },
                                  "value": "0x6125ede5"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1629875685_by_1",
                                    "typeString": "int_const 1629875685"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 725,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 712,
                                  "src": "3721:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Contract_$556",
                                    "typeString": "contract Contract"
                                  }
                                },
                                "id": 726,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "supportsInterface",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3863,
                                "src": "3721:19:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_bytes4_$returns$_t_bool_$",
                                  "typeString": "function (bytes4) view external returns (bool)"
                                }
                              },
                              "id": 728,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3721:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 724,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4919,
                              4920
                            ],
                            "referencedDeclaration": 4919,
                            "src": "3713:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3713:40:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 730,
                        "nodeType": "ExpressionStatement",
                        "src": "3713:40:5"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 731,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 580,
                            "src": "3772:5:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3780:1:5",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3772:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 749,
                        "nodeType": "IfStatement",
                        "src": "3768:124:5",
                        "trueBody": {
                          "id": 748,
                          "nodeType": "Block",
                          "src": "3783:109:5",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 738,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 735,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4916,
                                        "src": "3809:3:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 736,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3809:9:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 737,
                                      "name": "price",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 580,
                                      "src": "3822:5:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3809:18:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 734,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    4919,
                                    4920
                                  ],
                                  "referencedDeclaration": 4919,
                                  "src": "3801:7:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 739,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3801:27:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 740,
                              "nodeType": "ExpressionStatement",
                              "src": "3801:27:5"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 744,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4916,
                                      "src": "3867:3:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 745,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3867:9:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 741,
                                    "name": "beneficiary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 582,
                                    "src": "3846:11:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3846:20:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3846:31:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 747,
                              "nodeType": "ExpressionStatement",
                              "src": "3846:31:5"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 751,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4916,
                                "src": "3923:3:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3923:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 753,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 682,
                              "src": "3935:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 750,
                            "name": "Instantiated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 588,
                            "src": "3910:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3910:41:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 755,
                        "nodeType": "EmitStatement",
                        "src": "3905:46:5"
                      }
                    ]
                  },
                  "id": 757,
                  "nodeType": "IfStatement",
                  "src": "3420:542:5",
                  "trueBody": {
                    "id": 710,
                    "nodeType": "Block",
                    "src": "3455:62:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "43616e6e6f7420696e7374616e746961746520636f6e7472616374",
                              "id": 707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3476:29:5",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e765d8ea345bcb5603a2433311c278b769e1fd697aed507d66436aff71cf4c99",
                                "typeString": "literal_string \"Cannot instantiate contract\""
                              },
                              "value": "Cannot instantiate contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_e765d8ea345bcb5603a2433311c278b769e1fd697aed507d66436aff71cf4c99",
                                "typeString": "literal_string \"Cannot instantiate contract\""
                              }
                            ],
                            "id": 706,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4921,
                              4922
                            ],
                            "referencedDeclaration": 4922,
                            "src": "3469:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3469:37:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 709,
                        "nodeType": "ExpressionStatement",
                        "src": "3469:37:5"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice `msg.sender` is passed as first argument for the newly created `Contract`.\n@param _bytecode Bytecode corresponding to `bytecodeHash`\n@param _args If arguments where passed to this function, those will be appended to the arguments for `Contract`.\n@return Newly created contract account's address",
            "id": 759,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "instantiate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 677,
                  "name": "_bytecode",
                  "nodeType": "VariableDeclaration",
                  "scope": 759,
                  "src": "3100:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 676,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3100:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 679,
                  "name": "_args",
                  "nodeType": "VariableDeclaration",
                  "scope": 759,
                  "src": "3117:11:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 678,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3117:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3099:30:5"
            },
            "payable": true,
            "returnParameters": {
              "id": 683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 682,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 759,
                  "src": "3154:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 681,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3154:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3153:25:5"
            },
            "scope": 760,
            "src": "3079:889:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 761,
        "src": "287:3683:5"
      }
    ],
    "src": "0:3971:5"
  },
  "legacyAST": {
    "absolutePath": "tokenboost-solidity/contracts/template/Template.sol",
    "exportedSymbols": {
      "Template": [
        760
      ]
    },
    "id": 761,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 558,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:5"
      },
      {
        "absolutePath": "zeppelin-solidity/contracts/ownership/Ownable.sol",
        "file": "zeppelin-solidity/contracts/ownership/Ownable.sol",
        "id": 559,
        "nodeType": "ImportDirective",
        "scope": 761,
        "sourceUnit": 4123,
        "src": "26:59:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "zeppelin-solidity/contracts/introspection/SupportsInterfaceWithLookup.sol",
        "file": "zeppelin-solidity/contracts/introspection/SupportsInterfaceWithLookup.sol",
        "id": 560,
        "nodeType": "ImportDirective",
        "scope": 761,
        "sourceUnit": 3883,
        "src": "86:83:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "tokenboost-solidity/contracts/Contract.sol",
        "file": "../Contract.sol",
        "id": 561,
        "nodeType": "ImportDirective",
        "scope": 761,
        "sourceUnit": 557,
        "src": "170:25:5",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 562,
              "name": "Ownable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4122,
              "src": "308:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Ownable_$4122",
                "typeString": "contract Ownable"
              }
            },
            "id": 563,
            "nodeType": "InheritanceSpecifier",
            "src": "308:7:5"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 564,
              "name": "SupportsInterfaceWithLookup",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3882,
              "src": "317:27:5",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SupportsInterfaceWithLookup_$3882",
                "typeString": "contract SupportsInterfaceWithLookup"
              }
            },
            "id": 565,
            "nodeType": "InheritanceSpecifier",
            "src": "317:27:5"
          }
        ],
        "contractDependencies": [
          3831,
          3882,
          4122
        ],
        "contractKind": "contract",
        "documentation": "@title Template\n@notice Template instantiates `Contract`s of the same form.",
        "fullyImplemented": true,
        "id": 760,
        "linearizedBaseContracts": [
          760,
          3882,
          3831,
          4122
        ],
        "name": "Template",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 568,
            "name": "InterfaceId_Template",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "688:56:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 566,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "688:6:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "30786434383434356666",
              "id": 567,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "734:10:5",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_3565438463_by_1",
                "typeString": "int_const 3565438463"
              },
              "value": "0xd48445ff"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 572,
            "name": "nameOfLocale",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "751:38:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
              "typeString": "mapping(string => string)"
            },
            "typeName": {
              "id": 571,
              "keyType": {
                "id": 569,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "759:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "751:25:5",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                "typeString": "mapping(string => string)"
              },
              "valueType": {
                "id": 570,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "769:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 576,
            "name": "descriptionOfLocale",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "795:45:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
              "typeString": "mapping(string => string)"
            },
            "typeName": {
              "id": 575,
              "keyType": {
                "id": 573,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "803:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "795:25:5",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                "typeString": "mapping(string => string)"
              },
              "valueType": {
                "id": 574,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "813:6:5",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 578,
            "name": "bytecodeHash",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "918:27:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 577,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "918:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 580,
            "name": "price",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "1014:17:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 579,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1014:4:5",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 582,
            "name": "beneficiary",
            "nodeType": "VariableDeclaration",
            "scope": 760,
            "src": "1095:26:5",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 581,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1095:7:5",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "@notice Logged when a new `Contract` instantiated.",
            "id": 588,
            "name": "Instantiated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 587,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 584,
                  "indexed": true,
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "scope": 588,
                  "src": "1221:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 583,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1221:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 586,
                  "indexed": true,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 588,
                  "src": "1246:31:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 585,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1246:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1220:58:5"
            },
            "src": "1202:77:5"
          },
          {
            "body": {
              "id": 626,
              "nodeType": "Block",
              "src": "1581:239:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 599,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 597,
                      "name": "bytecodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 578,
                      "src": "1591:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 598,
                      "name": "_bytecodeHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 590,
                      "src": "1606:13:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1591:28:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 600,
                  "nodeType": "ExpressionStatement",
                  "src": "1591:28:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 603,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 601,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 580,
                      "src": "1629:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 602,
                      "name": "_price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 592,
                      "src": "1637:6:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1629:14:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 604,
                  "nodeType": "ExpressionStatement",
                  "src": "1629:14:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 605,
                      "name": "beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 582,
                      "src": "1653:11:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 606,
                      "name": "_beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 594,
                      "src": "1667:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1653:26:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 608,
                  "nodeType": "ExpressionStatement",
                  "src": "1653:26:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 609,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 580,
                      "src": "1693:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1701:1:5",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1693:9:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 621,
                  "nodeType": "IfStatement",
                  "src": "1689:74:5",
                  "trueBody": {
                    "id": 620,
                    "nodeType": "Block",
                    "src": "1704:59:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 613,
                                "name": "beneficiary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 582,
                                "src": "1726:11:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 615,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1749:1:5",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 614,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1741:7:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1741:10:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1726:25:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 612,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4919,
                              4920
                            ],
                            "referencedDeclaration": 4919,
                            "src": "1718:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1718:34:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 619,
                        "nodeType": "ExpressionStatement",
                        "src": "1718:34:5"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 623,
                        "name": "InterfaceId_Template",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 568,
                        "src": "1792:20:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 622,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3881,
                      "src": "1773:18:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1773:40:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 625,
                  "nodeType": "ExpressionStatement",
                  "src": "1773:40:5"
                }
              ]
            },
            "documentation": "@param _bytecodeHash Hash of EVM bytecode\n@param _price Price of instantiating in wei\n@param _beneficiary Address to transfer _price when instantiating",
            "id": 627,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 595,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 590,
                  "name": "_bytecodeHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "1495:21:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 589,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1495:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 592,
                  "name": "_price",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "1526:11:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 591,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "1526:4:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 594,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 627,
                  "src": "1547:20:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 593,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1547:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1485:88:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 596,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1581:0:5"
            },
            "scope": 760,
            "src": "1474:346:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 638,
              "nodeType": "Block",
              "src": "2024:45:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 634,
                      "name": "nameOfLocale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 572,
                      "src": "2041:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                        "typeString": "mapping(string memory => string storage ref)"
                      }
                    },
                    "id": 636,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 635,
                      "name": "_locale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 629,
                      "src": "2054:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2041:21:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 633,
                  "id": 637,
                  "nodeType": "Return",
                  "src": "2034:28:5"
                }
              ]
            },
            "documentation": "@param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n@return Name in `_locale`.",
            "id": 639,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 629,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 639,
                  "src": "1979:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 628,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1979:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1978:16:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 632,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 639,
                  "src": "2016:6:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 631,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2016:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2015:8:5"
            },
            "scope": 760,
            "src": "1965:104:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 650,
              "nodeType": "Block",
              "src": "2287:52:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 646,
                      "name": "descriptionOfLocale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 576,
                      "src": "2304:19:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                        "typeString": "mapping(string memory => string storage ref)"
                      }
                    },
                    "id": 648,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 647,
                      "name": "_locale",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 641,
                      "src": "2324:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2304:28:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 645,
                  "id": 649,
                  "nodeType": "Return",
                  "src": "2297:35:5"
                }
              ]
            },
            "documentation": "@param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n@return Description in `_locale`.",
            "id": 651,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "description",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 642,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 641,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 651,
                  "src": "2242:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 640,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2242:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2241:16:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 644,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 651,
                  "src": "2279:6:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 643,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2279:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2278:8:5"
            },
            "scope": 760,
            "src": "2221:118:5",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 674,
              "nodeType": "Block",
              "src": "2627:99:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 662,
                        "name": "nameOfLocale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 572,
                        "src": "2637:12:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                          "typeString": "mapping(string memory => string storage ref)"
                        }
                      },
                      "id": 664,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 663,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 653,
                        "src": "2650:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2637:21:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 665,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 655,
                      "src": "2661:5:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2637:29:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 667,
                  "nodeType": "ExpressionStatement",
                  "src": "2637:29:5"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 668,
                        "name": "descriptionOfLocale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 576,
                        "src": "2676:19:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_$_t_string_storage_$",
                          "typeString": "mapping(string memory => string storage ref)"
                        }
                      },
                      "id": 670,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 669,
                        "name": "_locale",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 653,
                        "src": "2696:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2676:28:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 671,
                      "name": "_description",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 657,
                      "src": "2707:12:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2676:43:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 673,
                  "nodeType": "ExpressionStatement",
                  "src": "2676:43:5"
                }
              ]
            },
            "documentation": "@param _locale IETF language tag(https://en.wikipedia.org/wiki/IETF_language_tag)\n@param _name Name to set\n@param _description Description to set",
            "id": 675,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 660,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 659,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 4070,
                  "src": "2617:9:5",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2617:9:5"
              }
            ],
            "name": "setNameAndDescription",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 658,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 653,
                  "name": "_locale",
                  "nodeType": "VariableDeclaration",
                  "scope": 675,
                  "src": "2559:14:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 652,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2559:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 655,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 675,
                  "src": "2575:12:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 654,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2575:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 657,
                  "name": "_description",
                  "nodeType": "VariableDeclaration",
                  "scope": 675,
                  "src": "2589:19:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 656,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2589:6:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2558:51:5"
            },
            "payable": false,
            "returnParameters": {
              "id": 661,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2627:0:5"
            },
            "scope": 760,
            "src": "2528:198:5",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 758,
              "nodeType": "Block",
              "src": "3179:789:5",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 685,
                          "name": "bytecodeHash",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 578,
                          "src": "3197:12:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 687,
                              "name": "_bytecode",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 677,
                              "src": "3223:9:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 686,
                            "name": "keccak256",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4910,
                            "src": "3213:9:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                              "typeString": "function () pure returns (bytes32)"
                            }
                          },
                          "id": 688,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3213:20:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "3197:36:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 684,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4919,
                        4920
                      ],
                      "referencedDeclaration": 4919,
                      "src": "3189:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3189:45:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 691,
                  "nodeType": "ExpressionStatement",
                  "src": "3189:45:5"
                },
                {
                  "assignments": [
                    693
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 693,
                      "name": "calldata",
                      "nodeType": "VariableDeclaration",
                      "scope": 759,
                      "src": "3244:21:5",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 692,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "3244:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 699,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 696,
                        "name": "_bytecode",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 677,
                        "src": "3285:9:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 697,
                        "name": "_args",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 679,
                        "src": "3296:5:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 694,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4903,
                        "src": "3268:3:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 695,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encodePacked",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3268:16:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 698,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3268:34:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3244:58:5"
                },
                {
                  "externalReferences": [
                    {
                      "contractAddress": {
                        "declaration": 682,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3335:15:5",
                        "valueSize": 1
                      }
                    },
                    {
                      "calldata": {
                        "declaration": 693,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3368:8:5",
                        "valueSize": 1
                      }
                    },
                    {
                      "calldata": {
                        "declaration": 693,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3391:8:5",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 700,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    contractAddress := create(0, add(calldata, 0x20), mload(calldata))\n}",
                  "src": "3312:110:5"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 701,
                      "name": "contractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 682,
                      "src": "3424:15:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3451:1:5",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "3443:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": "address"
                      },
                      "id": 704,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3443:10:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3424:29:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 756,
                    "nodeType": "Block",
                    "src": "3523:439:5",
                    "statements": [
                      {
                        "assignments": [
                          712
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 712,
                            "name": "c",
                            "nodeType": "VariableDeclaration",
                            "scope": 759,
                            "src": "3537:10:5",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_Contract_$556",
                              "typeString": "contract Contract"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 711,
                              "name": "Contract",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 556,
                              "src": "3537:8:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Contract_$556",
                                "typeString": "contract Contract"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 716,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 714,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 682,
                              "src": "3559:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 713,
                            "name": "Contract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 556,
                            "src": "3550:8:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Contract_$556_$",
                              "typeString": "type(contract Contract)"
                            }
                          },
                          "id": 715,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3550:25:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_Contract_$556",
                            "typeString": "contract Contract"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3537:38:5"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783031666663396137",
                                  "id": 720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3651:10:5",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_33540519_by_1",
                                    "typeString": "int_const 33540519"
                                  },
                                  "value": "0x01ffc9a7"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_33540519_by_1",
                                    "typeString": "int_const 33540519"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 718,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 712,
                                  "src": "3631:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Contract_$556",
                                    "typeString": "contract Contract"
                                  }
                                },
                                "id": 719,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "supportsInterface",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3863,
                                "src": "3631:19:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_bytes4_$returns$_t_bool_$",
                                  "typeString": "function (bytes4) view external returns (bool)"
                                }
                              },
                              "id": 721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3631:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 717,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4919,
                              4920
                            ],
                            "referencedDeclaration": 4919,
                            "src": "3623:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3623:40:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 723,
                        "nodeType": "ExpressionStatement",
                        "src": "3623:40:5"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30783631323565646535",
                                  "id": 727,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3741:10:5",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1629875685_by_1",
                                    "typeString": "int_const 1629875685"
                                  },
                                  "value": "0x6125ede5"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_1629875685_by_1",
                                    "typeString": "int_const 1629875685"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 725,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 712,
                                  "src": "3721:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Contract_$556",
                                    "typeString": "contract Contract"
                                  }
                                },
                                "id": 726,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "supportsInterface",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3863,
                                "src": "3721:19:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_bytes4_$returns$_t_bool_$",
                                  "typeString": "function (bytes4) view external returns (bool)"
                                }
                              },
                              "id": 728,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3721:31:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 724,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4919,
                              4920
                            ],
                            "referencedDeclaration": 4919,
                            "src": "3713:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3713:40:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 730,
                        "nodeType": "ExpressionStatement",
                        "src": "3713:40:5"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 733,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 731,
                            "name": "price",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 580,
                            "src": "3772:5:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3780:1:5",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3772:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 749,
                        "nodeType": "IfStatement",
                        "src": "3768:124:5",
                        "trueBody": {
                          "id": 748,
                          "nodeType": "Block",
                          "src": "3783:109:5",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 738,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 735,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4916,
                                        "src": "3809:3:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 736,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "value",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "3809:9:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "id": 737,
                                      "name": "price",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 580,
                                      "src": "3822:5:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "3809:18:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 734,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    4919,
                                    4920
                                  ],
                                  "referencedDeclaration": 4919,
                                  "src": "3801:7:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                                    "typeString": "function (bool) pure"
                                  }
                                },
                                "id": 739,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3801:27:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 740,
                              "nodeType": "ExpressionStatement",
                              "src": "3801:27:5"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 744,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4916,
                                      "src": "3867:3:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 745,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "value",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3867:9:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 741,
                                    "name": "beneficiary",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 582,
                                    "src": "3846:11:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "id": 743,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "transfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "3846:20:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256)"
                                  }
                                },
                                "id": 746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3846:31:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 747,
                              "nodeType": "ExpressionStatement",
                              "src": "3846:31:5"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 751,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4916,
                                "src": "3923:3:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 752,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3923:10:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 753,
                              "name": "contractAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 682,
                              "src": "3935:15:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 750,
                            "name": "Instantiated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 588,
                            "src": "3910:12:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3910:41:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 755,
                        "nodeType": "EmitStatement",
                        "src": "3905:46:5"
                      }
                    ]
                  },
                  "id": 757,
                  "nodeType": "IfStatement",
                  "src": "3420:542:5",
                  "trueBody": {
                    "id": 710,
                    "nodeType": "Block",
                    "src": "3455:62:5",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "43616e6e6f7420696e7374616e746961746520636f6e7472616374",
                              "id": 707,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3476:29:5",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_e765d8ea345bcb5603a2433311c278b769e1fd697aed507d66436aff71cf4c99",
                                "typeString": "literal_string \"Cannot instantiate contract\""
                              },
                              "value": "Cannot instantiate contract"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_e765d8ea345bcb5603a2433311c278b769e1fd697aed507d66436aff71cf4c99",
                                "typeString": "literal_string \"Cannot instantiate contract\""
                              }
                            ],
                            "id": 706,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4921,
                              4922
                            ],
                            "referencedDeclaration": 4922,
                            "src": "3469:6:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 708,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3469:37:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 709,
                        "nodeType": "ExpressionStatement",
                        "src": "3469:37:5"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice `msg.sender` is passed as first argument for the newly created `Contract`.\n@param _bytecode Bytecode corresponding to `bytecodeHash`\n@param _args If arguments where passed to this function, those will be appended to the arguments for `Contract`.\n@return Newly created contract account's address",
            "id": 759,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "instantiate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 677,
                  "name": "_bytecode",
                  "nodeType": "VariableDeclaration",
                  "scope": 759,
                  "src": "3100:15:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 676,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3100:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 679,
                  "name": "_args",
                  "nodeType": "VariableDeclaration",
                  "scope": 759,
                  "src": "3117:11:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 678,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3117:5:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3099:30:5"
            },
            "payable": true,
            "returnParameters": {
              "id": 683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 682,
                  "name": "contractAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 759,
                  "src": "3154:23:5",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 681,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3154:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3153:25:5"
            },
            "scope": 760,
            "src": "3079:889:5",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 761,
        "src": "287:3683:5"
      }
    ],
    "src": "0:3971:5"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-10-16T05:56:33.153Z"
}