{
  "contractName": "AgentRole",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"AgentAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"AgentRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/roles/AgentRole.sol\":\"AgentRole\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"project:/contracts/roles/AgentRole.sol\":{\"keccak256\":\"0x2a264adff17bd254164e69c882dc033d8b7e9bc6eab01c5e7d2ad26324a2c953\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://585dfaafc7e37d38ff6f0c5ca4a8e0ad1e92b0babd1f54762bfaa8c67c1ec2d7\",\"dweb:/ipfs/QmXVnTvX1zVVQoxSZBgKRptSVz22T2vyXC3P89Bsv9x7Jg\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104d08061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631ffbb06414610067578063715018a61461008f57806384e79842146100995780638da5cb5b146100ac57806397a6278e146100cc578063f2fde38b146100df575b600080fd5b61007a61007536600461046a565b6100f2565b60405190151581526020015b60405180910390f35b610097610105565b005b6100976100a736600461046a565b610119565b6100b4610163565b6040516001600160a01b039091168152602001610086565b6100976100da36600461046a565b610172565b6100976100ed36600461046a565b6101bc565b60006100ff60018361023a565b92915050565b61010d6102bd565b610117600061031c565b565b6101216102bd565b61012c60018261036c565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b61017a6102bd565b6101856001826103e8565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6101c46102bd565b6001600160a01b03811661022e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6102378161031c565b50565b60006001600160a01b03821661029d5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610225565b506001600160a01b03166000908152602091909152604090205460ff1690565b336102c6610163565b6001600160a01b0316146101175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610225565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610376828261023a565b156103c35760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610225565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6103f2828261023a565b6104485760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610225565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60006020828403121561047c57600080fd5b81356001600160a01b038116811461049357600080fd5b939250505056fea2646970667358221220c5fd1023cdc19b64313f846e620b74b764aa0df4b9b816d16c9b2bd48a2a16e364736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80631ffbb06414610067578063715018a61461008f57806384e79842146100995780638da5cb5b146100ac57806397a6278e146100cc578063f2fde38b146100df575b600080fd5b61007a61007536600461046a565b6100f2565b60405190151581526020015b60405180910390f35b610097610105565b005b6100976100a736600461046a565b610119565b6100b4610163565b6040516001600160a01b039091168152602001610086565b6100976100da36600461046a565b610172565b6100976100ed36600461046a565b6101bc565b60006100ff60018361023a565b92915050565b61010d6102bd565b610117600061031c565b565b6101216102bd565b61012c60018261036c565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b6000546001600160a01b031690565b61017a6102bd565b6101856001826103e8565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6101c46102bd565b6001600160a01b03811661022e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6102378161031c565b50565b60006001600160a01b03821661029d5760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610225565b506001600160a01b03166000908152602091909152604090205460ff1690565b336102c6610163565b6001600160a01b0316146101175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610225565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610376828261023a565b156103c35760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610225565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6103f2828261023a565b6104485760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610225565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60006020828403121561047c57600080fd5b81356001600160a01b038116811461049357600080fd5b939250505056fea2646970667358221220c5fd1023cdc19b64313f846e620b74b764aa0df4b9b816d16c9b2bd48a2a16e364736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:2635:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:216:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "155:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "181:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "168:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "168:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "159:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "254:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "263:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "266:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "256:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "256:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "256:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "213:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "224:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "239:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "244:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "235:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "235:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "248:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "231:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "231:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "220:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "220:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "210:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "210:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "203:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "200:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "279:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "289:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "279:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:286:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "400:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "410:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "422:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "433:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "418:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "418:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "410:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "452:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "477:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "470:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "470:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "463:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "463:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "445:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "445:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "445:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "369:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "380:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "391:4:54",
                "type": ""
              }
            ],
            "src": "305:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "598:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "608:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "620:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "631:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "616:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "616:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "608:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "650:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "665:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "681:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "686:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "677:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "677:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "690:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "673:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "673:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "661:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "661:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "643:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "643:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "643:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "567:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "578:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "589:4:54",
                "type": ""
              }
            ],
            "src": "497:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "879:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "896:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "907:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "889:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "889:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "889:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "930:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "941:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "926:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "926:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "946:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "919:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "919:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "919:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "969:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "980:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "965:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "965:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "985:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "958:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "958:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "958:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1040:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1051:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1036:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1036:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1056:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1029:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1029:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1029:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1074:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1086:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1097:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1082:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1082:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1074:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "856:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "870:4:54",
                "type": ""
              }
            ],
            "src": "705:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1286:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1303:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1314:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1296:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1296:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1296:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1337:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1348:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1333:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1333:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1353:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1326:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1326:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1326:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1376:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1387:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1372:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1372:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1392:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1365:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1365:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1365:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1447:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1458:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1443:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1443:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1463:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1436:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1436:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1436:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1477:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1489:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1500:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1485:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1485:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1477:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1263:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1277:4:54",
                "type": ""
              }
            ],
            "src": "1112:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1689:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1706:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1717:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1699:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1699:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1699:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1740:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1751:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1736:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1736:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1756:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1729:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1729:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1729:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1779:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1790:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1775:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1775:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1795:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1768:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1768:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1768:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1839:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1851:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1862:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1847:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1847:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1839:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1666:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1680:4:54",
                "type": ""
              }
            ],
            "src": "1515:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2050:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2067:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2078:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2060:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2060:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2060:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2101:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2112:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2097:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2097:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2117:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2090:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2090:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2090:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2140:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2151:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2136:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2136:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2156:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2129:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2129:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2129:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2199:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2211:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2222:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2207:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2207:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2199:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2027:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2041:4:54",
                "type": ""
              }
            ],
            "src": "1876:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2410:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2427:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2438:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2420:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2420:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2420:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2461:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2472:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2457:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2457:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2477:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2450:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2450:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2450:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2500:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2511:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2496:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2496:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2516:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2489:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2489:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2489:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2571:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2582:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2567:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2567:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2587:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2560:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2560:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2560:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2600:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2612:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2623:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2608:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2608:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2600:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2387:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2401:4:54",
                "type": ""
              }
            ],
            "src": "2236:397:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Roles: account is the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Roles: account already has role\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Roles: account does not have rol\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1195:695:43:-:0;;;;;;;;;;;;-1:-1:-1;936:32:13;719:10:20;936:18:13;:32::i;:::-;1195:695:43;;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1195:695:43:-;;;;;;;",
  "deployedSourceMap": "1195:695:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1525:103;;;;;;:::i;:::-;;:::i;:::-;;;470:14:54;;463:22;445:41;;433:2;418:18;1525:103:43;;;;;;;;1831:101:13;;;:::i;:::-;;1634:120:43;;;;;;:::i;:::-;;:::i;1201:85:13:-;;;:::i;:::-;;;-1:-1:-1;;;;;661:32:54;;;643:51;;631:2;616:18;1201:85:13;497:203:54;1760:128:43;;;;;;:::i;:::-;;:::i;2081:198:13:-;;;;;;:::i;:::-;;:::i;1525:103:43:-;1579:4;1602:19;:7;1614:6;1602:11;:19::i;:::-;1595:26;1525:103;-1:-1:-1;;1525:103:43:o;1831:101:13:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1634:120:43:-;1094:13:13;:11;:13::i;:::-;1695:19:43::1;:7;1707:6:::0;1695:11:::1;:19::i;:::-;1729:18;::::0;-1:-1:-1;;;;;1729:18:43;::::1;::::0;::::1;::::0;;;::::1;1634:120:::0;:::o;1201:85:13:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:13;;1201:85::o;1760:128:43:-;1094:13:13;:11;:13::i;:::-;1824:22:43::1;:7;1839:6:::0;1824:14:::1;:22::i;:::-;1861:20;::::0;-1:-1:-1;;;;;1861:20:43;::::1;::::0;::::1;::::0;;;::::1;1760:128:::0;:::o;2081:198:13:-;1094:13;:11;:13::i;:::-;-1:-1:-1;;;;;2169:22:13;::::1;2161:73;;;::::0;-1:-1:-1;;;2161:73:13;;907:2:54;2161:73:13::1;::::0;::::1;889:21:54::0;946:2;926:18;;;919:30;985:34;965:18;;;958:62;-1:-1:-1;;;1036:18:54;;;1029:36;1082:19;;2161:73:13::1;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;815:200:50:-;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;1314:2:54;903:68:50;;;1296:21:54;1353:2;1333:18;;;1326:30;1392:34;1372:18;;;1365:62;-1:-1:-1;;;1443:18:54;;;1436:32;1485:19;;903:68:50;1112:398:54;903:68:50;-1:-1:-1;;;;;;988:20:50;:11;:20;;;;;;;;;;;;;;;815:200::o;1359:130:13:-;719:10:20;1422:7:13;:5;:7::i;:::-;-1:-1:-1;;;;;1422:23:13;;1414:68;;;;-1:-1:-1;;;1414:68:13;;1717:2:54;1414:68:13;;;1699:21:54;;;1736:18;;;1729:30;1795:34;1775:18;;;1768:62;1847:18;;1414:68:13;1515:356:54;2433:187:13;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:13;;;-1:-1:-1;;;;;;2541:17:13;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;296:175:50:-;373:18;377:4;383:7;373:3;:18::i;:::-;372:19;364:63;;;;-1:-1:-1;;;364:63:50;;2078:2:54;364:63:50;;;2060:21:54;2117:2;2097:18;;;2090:30;2156:33;2136:18;;;2129:61;2207:18;;364:63:50;1876:355:54;364:63:50;-1:-1:-1;;;;;437:20:50;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;437:27:50;460:4;437:27;;;296:175::o;546:180::-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;2438:2:54;617:64:50;;;2420:21:54;2477:2;2457:18;;;2450:30;2516:34;2496:18;;;2489:62;-1:-1:-1;;;2567:18:54;;;2560:31;2608:19;;617:64:50;2236:397:54;617:64:50;-1:-1:-1;;;;;691:20:50;714:5;691:20;;;;;;;;;;;:28;;-1:-1:-1;;691:28:50;;;546:180::o;14:286:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:54;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:54:o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport '@openzeppelin/contracts/access/Ownable.sol';\n\nimport './Roles.sol';\n\ncontract AgentRole is Ownable {\n    using Roles for Roles.Role;\n\n    event AgentAdded(address indexed _agent);\n    event AgentRemoved(address indexed _agent);\n\n    Roles.Role private _agents;\n\n    modifier onlyAgent() {\n        require(isAgent(msg.sender), 'AgentRole: caller does not have the Agent role');\n        _;\n    }\n\n    function isAgent(address _agent) public view returns (bool) {\n        return _agents.has(_agent);\n    }\n\n    function addAgent(address _agent) public onlyOwner {\n        _agents.add(_agent);\n        emit AgentAdded(_agent);\n    }\n\n    function removeAgent(address _agent) public onlyOwner {\n        _agents.remove(_agent);\n        emit AgentRemoved(_agent);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/roles/AgentRole.sol",
  "ast": {
    "absolutePath": "project:/contracts/roles/AgentRole.sol",
    "exportedSymbols": {
      "AgentRole": [
        9120
      ],
      "Context": [
        3401
      ],
      "Ownable": [
        2505
      ],
      "Roles": [
        11901
      ]
    },
    "id": 9121,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9039,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:43"
      },
      {
        "absolutePath": "@openzeppelin/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts/access/Ownable.sol",
        "id": 9040,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9121,
        "sourceUnit": 2506,
        "src": "1118:52:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/Roles.sol",
        "file": "./Roles.sol",
        "id": 9041,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 9121,
        "sourceUnit": 11902,
        "src": "1172:21:43",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 9042,
              "name": "Ownable",
              "nameLocations": [
                "1217:7:43"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2505,
              "src": "1217:7:43"
            },
            "id": 9043,
            "nodeType": "InheritanceSpecifier",
            "src": "1217:7:43"
          }
        ],
        "canonicalName": "AgentRole",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 9120,
        "linearizedBaseContracts": [
          9120,
          2505,
          3401
        ],
        "name": "AgentRole",
        "nameLocation": "1204:9:43",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 9047,
            "libraryName": {
              "id": 9044,
              "name": "Roles",
              "nameLocations": [
                "1237:5:43"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11901,
              "src": "1237:5:43"
            },
            "nodeType": "UsingForDirective",
            "src": "1231:27:43",
            "typeName": {
              "id": 9046,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9045,
                "name": "Roles.Role",
                "nameLocations": [
                  "1247:5:43",
                  "1253:4:43"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1247:10:43"
              },
              "referencedDeclaration": 11820,
              "src": "1247:10:43",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "eventSelector": "f68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec5",
            "id": 9051,
            "name": "AgentAdded",
            "nameLocation": "1270:10:43",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9049,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1297:6:43",
                  "nodeType": "VariableDeclaration",
                  "scope": 9051,
                  "src": "1281:22:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1281:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1280:24:43"
            },
            "src": "1264:41:43"
          },
          {
            "anonymous": false,
            "eventSelector": "ed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b",
            "id": 9055,
            "name": "AgentRemoved",
            "nameLocation": "1316:12:43",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9054,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9053,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1345:6:43",
                  "nodeType": "VariableDeclaration",
                  "scope": 9055,
                  "src": "1329:22:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9052,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1329:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1328:24:43"
            },
            "src": "1310:43:43"
          },
          {
            "constant": false,
            "id": 9058,
            "mutability": "mutable",
            "name": "_agents",
            "nameLocation": "1378:7:43",
            "nodeType": "VariableDeclaration",
            "scope": 9120,
            "src": "1359:26:43",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9057,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9056,
                "name": "Roles.Role",
                "nameLocations": [
                  "1359:5:43",
                  "1365:4:43"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1359:10:43"
              },
              "referencedDeclaration": 11820,
              "src": "1359:10:43",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 9069,
              "nodeType": "Block",
              "src": "1413:106:43",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 9062,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1439:3:43",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 9063,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1443:6:43",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1439:10:43",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 9061,
                          "name": "isAgent",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9083,
                          "src": "1431:7:43",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 9064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1431:19:43",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4167656e74526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204167656e7420726f6c65",
                        "id": 9065,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1452:48:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_74a06637aa9b3f007e79b88b2581192c891126ad4f09db67db18ede3d2b5435c",
                          "typeString": "literal_string \"AgentRole: caller does not have the Agent role\""
                        },
                        "value": "AgentRole: caller does not have the Agent role"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_74a06637aa9b3f007e79b88b2581192c891126ad4f09db67db18ede3d2b5435c",
                          "typeString": "literal_string \"AgentRole: caller does not have the Agent role\""
                        }
                      ],
                      "id": 9060,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1423:7:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1423:78:43",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9067,
                  "nodeType": "ExpressionStatement",
                  "src": "1423:78:43"
                },
                {
                  "id": 9068,
                  "nodeType": "PlaceholderStatement",
                  "src": "1511:1:43"
                }
              ]
            },
            "id": 9070,
            "name": "onlyAgent",
            "nameLocation": "1401:9:43",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 9059,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1410:2:43"
            },
            "src": "1392:127:43",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9082,
              "nodeType": "Block",
              "src": "1585:43:43",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9079,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9072,
                        "src": "1614:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9077,
                        "name": "_agents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9058,
                        "src": "1602:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9078,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1610:3:43",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "1602:11:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1602:19:43",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9076,
                  "id": 9081,
                  "nodeType": "Return",
                  "src": "1595:26:43"
                }
              ]
            },
            "functionSelector": "1ffbb064",
            "id": 9083,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAgent",
            "nameLocation": "1534:7:43",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9072,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1550:6:43",
                  "nodeType": "VariableDeclaration",
                  "scope": 9083,
                  "src": "1542:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9071,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1542:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1541:16:43"
            },
            "returnParameters": {
              "id": 9076,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9075,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9083,
                  "src": "1579:4:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9074,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1579:4:43",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1578:6:43"
            },
            "scope": 9120,
            "src": "1525:103:43",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9100,
              "nodeType": "Block",
              "src": "1685:69:43",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9093,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9085,
                        "src": "1707:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9090,
                        "name": "_agents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9058,
                        "src": "1695:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9092,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1703:3:43",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "1695:11:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1695:19:43",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9095,
                  "nodeType": "ExpressionStatement",
                  "src": "1695:19:43"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9097,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9085,
                        "src": "1740:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9096,
                      "name": "AgentAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9051,
                      "src": "1729:10:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 9098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1729:18:43",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9099,
                  "nodeType": "EmitStatement",
                  "src": "1724:23:43"
                }
              ]
            },
            "functionSelector": "84e79842",
            "id": 9101,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9088,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9087,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "1675:9:43"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "1675:9:43"
                },
                "nodeType": "ModifierInvocation",
                "src": "1675:9:43"
              }
            ],
            "name": "addAgent",
            "nameLocation": "1643:8:43",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9086,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9085,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1660:6:43",
                  "nodeType": "VariableDeclaration",
                  "scope": 9101,
                  "src": "1652:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1652:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1651:16:43"
            },
            "returnParameters": {
              "id": 9089,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1685:0:43"
            },
            "scope": 9120,
            "src": "1634:120:43",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9118,
              "nodeType": "Block",
              "src": "1814:74:43",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9111,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9103,
                        "src": "1839:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9108,
                        "name": "_agents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9058,
                        "src": "1824:7:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9110,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1832:6:43",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "1824:14:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1824:22:43",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9113,
                  "nodeType": "ExpressionStatement",
                  "src": "1824:22:43"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9115,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9103,
                        "src": "1874:6:43",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 9114,
                      "name": "AgentRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9055,
                      "src": "1861:12:43",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 9116,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1861:20:43",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9117,
                  "nodeType": "EmitStatement",
                  "src": "1856:25:43"
                }
              ]
            },
            "functionSelector": "97a6278e",
            "id": 9119,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9106,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9105,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "1804:9:43"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2424,
                  "src": "1804:9:43"
                },
                "nodeType": "ModifierInvocation",
                "src": "1804:9:43"
              }
            ],
            "name": "removeAgent",
            "nameLocation": "1769:11:43",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9103,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1789:6:43",
                  "nodeType": "VariableDeclaration",
                  "scope": 9119,
                  "src": "1781:14:43",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1781:7:43",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1780:16:43"
            },
            "returnParameters": {
              "id": 9107,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1814:0:43"
            },
            "scope": 9120,
            "src": "1760:128:43",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 9121,
        "src": "1195:695:43",
        "usedErrors": []
      }
    ],
    "src": "1093:798:43"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.391Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}