{
  "contractName": "PauserRole",
  "abi": [
    {
      "inputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "PauserRemoved",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "isPauser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "addPauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renouncePauser",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":\"PauserRole\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"openzeppelin-solidity/contracts/access/Roles.sol\":{\"keccak256\":\"0x659ba0f9a3392cd50a8a5fafaf5dfd8c6a0878f6a4613bceff4e90dceddcd865\",\"urls\":[\"bzz-raw://4ca6617349a9b36fd82e9442a8e445ce9021a174e4399d1457ddc894ee3f5df3\",\"dweb:/ipfs/QmcmyB4cNazZ1sw963Afaijt67M9bDgwmGXCgQajGTD4tm\"]},\"openzeppelin-solidity/contracts/access/roles/PauserRole.sol\":{\"keccak256\":\"0x6506133e295a7199df2ac5dfc52853d9d767f68450b6d0193e9d8056b164ce86\",\"urls\":[\"bzz-raw://9c03592a9e6b1377e401b74eccf175a250232b5a341347d3fc5cb50e9bc86ba2\",\"dweb:/ipfs/QmYAr1yXT89hNUMJ37aiBpD9HtYfBDqmueVCzphRuuU7oZ\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity ^0.5.0;\n\nimport \"../Roles.sol\";\n\ncontract PauserRole {\n    using Roles for Roles.Role;\n\n    event PauserAdded(address indexed account);\n    event PauserRemoved(address indexed account);\n\n    Roles.Role private _pausers;\n\n    constructor () internal {\n        _addPauser(msg.sender);\n    }\n\n    modifier onlyPauser() {\n        require(isPauser(msg.sender));\n        _;\n    }\n\n    function isPauser(address account) public view returns (bool) {\n        return _pausers.has(account);\n    }\n\n    function addPauser(address account) public onlyPauser {\n        _addPauser(account);\n    }\n\n    function renouncePauser() public {\n        _removePauser(msg.sender);\n    }\n\n    function _addPauser(address account) internal {\n        _pausers.add(account);\n        emit PauserAdded(account);\n    }\n\n    function _removePauser(address account) internal {\n        _pausers.remove(account);\n        emit PauserRemoved(account);\n    }\n}\n",
  "sourcePath": "openzeppelin-solidity/contracts/access/roles/PauserRole.sol",
  "ast": {
    "absolutePath": "openzeppelin-solidity/contracts/access/roles/PauserRole.sol",
    "exportedSymbols": {
      "PauserRole": [
        20947
      ]
    },
    "id": 20948,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 20846,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:72"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "../Roles.sol",
        "id": 20847,
        "nodeType": "ImportDirective",
        "scope": 20948,
        "sourceUnit": 20742,
        "src": "25:22:72",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 20947,
        "linearizedBaseContracts": [
          20947
        ],
        "name": "PauserRole",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20850,
            "libraryName": {
              "contractScope": null,
              "id": 20848,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20741,
              "src": "81:5:72",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$20741",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "75:27:72",
            "typeName": {
              "contractScope": null,
              "id": 20849,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "91:10:72",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20854,
            "name": "PauserAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20852,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20854,
                  "src": "126:23:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20851,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "126:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "125:25:72"
            },
            "src": "108:43:72"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20858,
            "name": "PauserRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20856,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20858,
                  "src": "176:23:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20855,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "176:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "175:25:72"
            },
            "src": "156:45:72"
          },
          {
            "constant": false,
            "id": 20860,
            "name": "_pausers",
            "nodeType": "VariableDeclaration",
            "scope": 20947,
            "src": "207:27:72",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 20859,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "207:10:72",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20868,
              "nodeType": "Block",
              "src": "265:39:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20864,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "286:3:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "286:10:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 20863,
                      "name": "_addPauser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20930,
                      "src": "275:10:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "275:22:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20867,
                  "nodeType": "ExpressionStatement",
                  "src": "275:22:72"
                }
              ]
            },
            "documentation": null,
            "id": 20869,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20861,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "253:2:72"
            },
            "returnParameters": {
              "id": 20862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "265:0:72"
            },
            "scope": 20947,
            "src": "241:63:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20879,
              "nodeType": "Block",
              "src": "332:57:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20873,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22171,
                              "src": "359:3:72",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20874,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "359:10:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 20872,
                          "name": "isPauser",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20893,
                          "src": "350:8:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 20875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "350:20:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20871,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "342:7:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "342:29:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20877,
                  "nodeType": "ExpressionStatement",
                  "src": "342:29:72"
                },
                {
                  "id": 20878,
                  "nodeType": "PlaceholderStatement",
                  "src": "381:1:72"
                }
              ]
            },
            "documentation": null,
            "id": 20880,
            "name": "onlyPauser",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "329:2:72"
            },
            "src": "310:79:72",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20892,
              "nodeType": "Block",
              "src": "457:45:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20889,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20882,
                        "src": "487:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20887,
                        "name": "_pausers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "474:8:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 20888,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20740,
                      "src": "474:12:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 20890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "474:21:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 20886,
                  "id": 20891,
                  "nodeType": "Return",
                  "src": "467:28:72"
                }
              ]
            },
            "documentation": null,
            "id": 20893,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isPauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20882,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20893,
                  "src": "413:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20881,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "413:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "412:17:72"
            },
            "returnParameters": {
              "id": 20886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20885,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 20893,
                  "src": "451:4:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20884,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "451:4:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "450:6:72"
            },
            "scope": 20947,
            "src": "395:107:72",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20904,
              "nodeType": "Block",
              "src": "562:36:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20901,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20895,
                        "src": "583:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20900,
                      "name": "_addPauser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20930,
                      "src": "572:10:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "572:19:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20903,
                  "nodeType": "ExpressionStatement",
                  "src": "572:19:72"
                }
              ]
            },
            "documentation": null,
            "id": 20905,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 20898,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20897,
                  "name": "onlyPauser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20880,
                  "src": "551:10:72",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "551:10:72"
              }
            ],
            "name": "addPauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20895,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20905,
                  "src": "527:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20894,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "527:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "526:17:72"
            },
            "returnParameters": {
              "id": 20899,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "562:0:72"
            },
            "scope": 20947,
            "src": "508:90:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20913,
              "nodeType": "Block",
              "src": "637:42:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20909,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "661:3:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "661:10:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 20908,
                      "name": "_removePauser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20946,
                      "src": "647:13:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "647:25:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20912,
                  "nodeType": "ExpressionStatement",
                  "src": "647:25:72"
                }
              ]
            },
            "documentation": null,
            "id": 20914,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "renouncePauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "627:2:72"
            },
            "returnParameters": {
              "id": 20907,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "637:0:72"
            },
            "scope": 20947,
            "src": "604:75:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20929,
              "nodeType": "Block",
              "src": "731:73:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20922,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20916,
                        "src": "754:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20919,
                        "name": "_pausers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "741:8:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 20921,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "741:12:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 20923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "741:21:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20924,
                  "nodeType": "ExpressionStatement",
                  "src": "741:21:72"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20926,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20916,
                        "src": "789:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20925,
                      "name": "PauserAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20854,
                      "src": "777:11:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "777:20:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20928,
                  "nodeType": "EmitStatement",
                  "src": "772:25:72"
                }
              ]
            },
            "documentation": null,
            "id": 20930,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addPauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20916,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20930,
                  "src": "705:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20915,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "705:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "704:17:72"
            },
            "returnParameters": {
              "id": 20918,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "731:0:72"
            },
            "scope": 20947,
            "src": "685:119:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20945,
              "nodeType": "Block",
              "src": "859:78:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20938,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20932,
                        "src": "885:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20935,
                        "name": "_pausers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "869:8:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 20937,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "869:15:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 20939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "869:24:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20940,
                  "nodeType": "ExpressionStatement",
                  "src": "869:24:72"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20942,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20932,
                        "src": "922:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20941,
                      "name": "PauserRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20858,
                      "src": "908:13:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "908:22:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20944,
                  "nodeType": "EmitStatement",
                  "src": "903:27:72"
                }
              ]
            },
            "documentation": null,
            "id": 20946,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removePauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20932,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20946,
                  "src": "833:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20931,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "833:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "832:17:72"
            },
            "returnParameters": {
              "id": 20934,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "859:0:72"
            },
            "scope": 20947,
            "src": "810:127:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 20948,
        "src": "49:890:72"
      }
    ],
    "src": "0:940:72"
  },
  "legacyAST": {
    "absolutePath": "openzeppelin-solidity/contracts/access/roles/PauserRole.sol",
    "exportedSymbols": {
      "PauserRole": [
        20947
      ]
    },
    "id": 20948,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 20846,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:72"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/access/Roles.sol",
        "file": "../Roles.sol",
        "id": 20847,
        "nodeType": "ImportDirective",
        "scope": 20948,
        "sourceUnit": 20742,
        "src": "25:22:72",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 20947,
        "linearizedBaseContracts": [
          20947
        ],
        "name": "PauserRole",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20850,
            "libraryName": {
              "contractScope": null,
              "id": 20848,
              "name": "Roles",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20741,
              "src": "81:5:72",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Roles_$20741",
                "typeString": "library Roles"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "75:27:72",
            "typeName": {
              "contractScope": null,
              "id": 20849,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "91:10:72",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20854,
            "name": "PauserAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20852,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20854,
                  "src": "126:23:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20851,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "126:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "125:25:72"
            },
            "src": "108:43:72"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20858,
            "name": "PauserRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20856,
                  "indexed": true,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20858,
                  "src": "176:23:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20855,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "176:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "175:25:72"
            },
            "src": "156:45:72"
          },
          {
            "constant": false,
            "id": 20860,
            "name": "_pausers",
            "nodeType": "VariableDeclaration",
            "scope": 20947,
            "src": "207:27:72",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$20654_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "contractScope": null,
              "id": 20859,
              "name": "Roles.Role",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 20654,
              "src": "207:10:72",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$20654_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 20868,
              "nodeType": "Block",
              "src": "265:39:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20864,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "286:3:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "286:10:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 20863,
                      "name": "_addPauser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20930,
                      "src": "275:10:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "275:22:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20867,
                  "nodeType": "ExpressionStatement",
                  "src": "275:22:72"
                }
              ]
            },
            "documentation": null,
            "id": 20869,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20861,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "253:2:72"
            },
            "returnParameters": {
              "id": 20862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "265:0:72"
            },
            "scope": 20947,
            "src": "241:63:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20879,
              "nodeType": "Block",
              "src": "332:57:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 20873,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22171,
                              "src": "359:3:72",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 20874,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "359:10:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 20872,
                          "name": "isPauser",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20893,
                          "src": "350:8:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 20875,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "350:20:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 20871,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        22174,
                        22175
                      ],
                      "referencedDeclaration": 22174,
                      "src": "342:7:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 20876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "342:29:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20877,
                  "nodeType": "ExpressionStatement",
                  "src": "342:29:72"
                },
                {
                  "id": 20878,
                  "nodeType": "PlaceholderStatement",
                  "src": "381:1:72"
                }
              ]
            },
            "documentation": null,
            "id": 20880,
            "name": "onlyPauser",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "329:2:72"
            },
            "src": "310:79:72",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20892,
              "nodeType": "Block",
              "src": "457:45:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20889,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20882,
                        "src": "487:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20887,
                        "name": "_pausers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "474:8:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 20888,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20740,
                      "src": "474:12:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 20890,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "474:21:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 20886,
                  "id": 20891,
                  "nodeType": "Return",
                  "src": "467:28:72"
                }
              ]
            },
            "documentation": null,
            "id": 20893,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isPauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20882,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20893,
                  "src": "413:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20881,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "413:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "412:17:72"
            },
            "returnParameters": {
              "id": 20886,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20885,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 20893,
                  "src": "451:4:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20884,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "451:4:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "450:6:72"
            },
            "scope": 20947,
            "src": "395:107:72",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20904,
              "nodeType": "Block",
              "src": "562:36:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20901,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20895,
                        "src": "583:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20900,
                      "name": "_addPauser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20930,
                      "src": "572:10:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "572:19:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20903,
                  "nodeType": "ExpressionStatement",
                  "src": "572:19:72"
                }
              ]
            },
            "documentation": null,
            "id": 20905,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 20898,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20897,
                  "name": "onlyPauser",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20880,
                  "src": "551:10:72",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "551:10:72"
              }
            ],
            "name": "addPauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20895,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20905,
                  "src": "527:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20894,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "527:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "526:17:72"
            },
            "returnParameters": {
              "id": 20899,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "562:0:72"
            },
            "scope": 20947,
            "src": "508:90:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20913,
              "nodeType": "Block",
              "src": "637:42:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 20909,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22171,
                          "src": "661:3:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 20910,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "661:10:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 20908,
                      "name": "_removePauser",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20946,
                      "src": "647:13:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "647:25:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20912,
                  "nodeType": "ExpressionStatement",
                  "src": "647:25:72"
                }
              ]
            },
            "documentation": null,
            "id": 20914,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "renouncePauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20906,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "627:2:72"
            },
            "returnParameters": {
              "id": 20907,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "637:0:72"
            },
            "scope": 20947,
            "src": "604:75:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20929,
              "nodeType": "Block",
              "src": "731:73:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20922,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20916,
                        "src": "754:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20919,
                        "name": "_pausers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "741:8:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 20921,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20686,
                      "src": "741:12:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 20923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "741:21:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20924,
                  "nodeType": "ExpressionStatement",
                  "src": "741:21:72"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20926,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20916,
                        "src": "789:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20925,
                      "name": "PauserAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20854,
                      "src": "777:11:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "777:20:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20928,
                  "nodeType": "EmitStatement",
                  "src": "772:25:72"
                }
              ]
            },
            "documentation": null,
            "id": 20930,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_addPauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20917,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20916,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20930,
                  "src": "705:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20915,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "705:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "704:17:72"
            },
            "returnParameters": {
              "id": 20918,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "731:0:72"
            },
            "scope": 20947,
            "src": "685:119:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20945,
              "nodeType": "Block",
              "src": "859:78:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20938,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20932,
                        "src": "885:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20935,
                        "name": "_pausers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20860,
                        "src": "869:8:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$20654_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 20937,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20717,
                      "src": "869:15:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$20654_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$20654_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 20939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "869:24:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20940,
                  "nodeType": "ExpressionStatement",
                  "src": "869:24:72"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20942,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20932,
                        "src": "922:7:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20941,
                      "name": "PauserRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20858,
                      "src": "908:13:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 20943,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "908:22:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20944,
                  "nodeType": "EmitStatement",
                  "src": "903:27:72"
                }
              ]
            },
            "documentation": null,
            "id": 20946,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_removePauser",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20932,
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 20946,
                  "src": "833:15:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20931,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "833:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "832:17:72"
            },
            "returnParameters": {
              "id": 20934,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "859:0:72"
            },
            "scope": 20947,
            "src": "810:127:72",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 20948,
        "src": "49:890:72"
      }
    ],
    "src": "0:940:72"
  },
  "compiler": {
    "name": "solc",
    "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.2",
  "updatedAt": "2021-08-23T07:33:52.640Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}