{
  "contractName": "ACLOracle",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "who",
          "type": "address"
        },
        {
          "name": "where",
          "type": "address"
        },
        {
          "name": "what",
          "type": "bytes32"
        }
      ],
      "name": "canPerform",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "pragma solidity 0.4.18;\n\nimport \"../apps/AragonApp.sol\";\nimport \"./ACLSyntaxSugar.sol\";\nimport \"./IACL.sol\";\n\n\ninterface ACLOracle {\n    function canPerform(address who, address where, bytes32 what) public view returns (bool);\n}\n\n\ncontract ACL is IACL, AragonApp, ACLHelpers {\n    bytes32 constant public CREATE_PERMISSIONS_ROLE = keccak256(\"CREATE_PERMISSIONS_ROLE\");\n\n    // whether a certain entity has a permission\n    mapping (bytes32 => bytes32) permissions; // 0 for no permission, or parameters id\n    mapping (bytes32 => Param[]) public permissionParams;\n\n    // who is the manager of a permission\n    mapping (bytes32 => address) permissionManager;\n\n    enum Op { NONE, EQ, NEQ, GT, LT, GTE, LTE, NOT, AND, OR, XOR, IF_ELSE, RET } // op types\n\n    struct Param {\n        uint8 id;\n        uint8 op;\n        uint240 value; // even though value is an uint240 it can store addresses\n        // in the case of 32 byte hashes losing 2 bytes precision isn't a huge deal\n        // op and id take less than 1 byte each so it can be kept in 1 sstore\n    }\n\n    uint8 constant BLOCK_NUMBER_PARAM_ID = 200;\n    uint8 constant TIMESTAMP_PARAM_ID    = 201;\n    uint8 constant SENDER_PARAM_ID       = 202;\n    uint8 constant ORACLE_PARAM_ID       = 203;\n    uint8 constant LOGIC_OP_PARAM_ID     = 204;\n    uint8 constant PARAM_VALUE_PARAM_ID  = 205;\n    // TODO: Add execution times param type?\n\n    bytes32 constant public EMPTY_PARAM_HASH = keccak256(uint256(0));\n    address constant ANY_ENTITY = address(-1);\n\n    modifier onlyPermissionManager(address _app, bytes32 _role) {\n        require(msg.sender == getPermissionManager(_app, _role));\n        _;\n    }\n\n    event SetPermission(address indexed entity, address indexed app, bytes32 indexed role, bool allowed);\n    event ChangePermissionManager(address indexed app, bytes32 indexed role, address indexed manager);\n\n    /**\n    * @dev Initialize can only be called once. It saves the block number in which it was initialized.\n    * @notice Initializes an ACL instance and sets `_permissionsCreator` as the entity that can create other permissions\n    * @param _permissionsCreator Entity that will be given permission over createPermission\n    */\n    function initialize(address _permissionsCreator) onlyInit public {\n        initialized();\n        require(msg.sender == address(kernel));\n\n        _createPermission(_permissionsCreator, this, CREATE_PERMISSIONS_ROLE, _permissionsCreator);\n    }\n\n    /**\n    * @dev Creates a permission that wasn't previously set. Access is limited by the ACL.\n    *      If a created permission is removed it is possible to reset it with createPermission.\n    * @notice Create a new permission granting `_entity` the ability to perform actions of role `_role` on `_app` (setting `_manager` as the permission manager)\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    * @param _manager Address of the entity that will be able to grant and revoke the permission further.\n    */\n    function createPermission(address _entity, address _app, bytes32 _role, address _manager) external {\n        require(hasPermission(msg.sender, address(this), CREATE_PERMISSIONS_ROLE));\n\n        _createPermission(_entity, _app, _role, _manager);\n    }\n\n    /**\n    * @dev Grants permission if allowed. This requires `msg.sender` to be the permission manager\n    * @notice Grants `_entity` the ability to perform actions of role `_role` on `_app`\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    */\n    function grantPermission(address _entity, address _app, bytes32 _role)\n        external\n    {\n        grantPermissionP(_entity, _app, _role, new uint256[](0));\n    }\n\n    /**\n    * @dev Grants a permission with parameters if allowed. This requires `msg.sender` to be the permission manager\n    * @notice Grants `_entity` the ability to perform actions of role `_role` on `_app`\n    * @param _entity Address of the whitelisted entity that will be able to perform the role\n    * @param _app Address of the app in which the role will be allowed (requires app to depend on kernel for ACL)\n    * @param _role Identifier for the group of actions in app given access to perform\n    * @param _params Permission parameters\n    */\n    function grantPermissionP(address _entity, address _app, bytes32 _role, uint256[] _params)\n        onlyPermissionManager(_app, _role)\n        public\n    {\n        require(!hasPermission(_entity, _app, _role));\n\n        bytes32 paramsHash = _params.length > 0 ? _saveParams(_params) : EMPTY_PARAM_HASH;\n        _setPermission(_entity, _app, _role, paramsHash);\n    }\n\n    /**\n    * @dev Revokes permission if allowed. This requires `msg.sender` to be the the permission manager\n    * @notice Revokes `_entity` the ability to perform actions of role `_role` on `_app`\n    * @param _entity Address of the whitelisted entity to revoke access from\n    * @param _app Address of the app in which the role will be revoked\n    * @param _role Identifier for the group of actions in app being revoked\n    */\n    function revokePermission(address _entity, address _app, bytes32 _role)\n        onlyPermissionManager(_app, _role)\n        external\n    {\n        require(hasPermission(_entity, _app, _role));\n\n        _setPermission(_entity, _app, _role, bytes32(0));\n    }\n\n    /**\n    * @notice Sets `_newManager` as the manager of the permission `_role` in `_app`\n    * @param _newManager Address for the new manager\n    * @param _app Address of the app in which the permission management is being transferred\n    * @param _role Identifier for the group of actions being transferred\n    */\n    function setPermissionManager(address _newManager, address _app, bytes32 _role)\n        onlyPermissionManager(_app, _role)\n        external\n    {\n        _setPermissionManager(_newManager, _app, _role);\n    }\n\n    /**\n    * @dev Get manager for permission\n    * @param _app Address of the app\n    * @param _role Identifier for a group of actions in app\n    * @return address of the manager for the permission\n    */\n    function getPermissionManager(address _app, bytes32 _role) public view returns (address) {\n        return permissionManager[roleHash(_app, _role)];\n    }\n\n    /**\n    * @dev Function called by apps to check ACL on kernel or to check permission statu\n    * @param _who Sender of the original call\n    * @param _where Address of the app\n    * @param _where Identifier for a group of actions in app\n    * @param _how Permission parameters\n    * @return boolean indicating whether the ACL allows the role or not\n    */\n    function hasPermission(address _who, address _where, bytes32 _what, bytes memory _how) public view returns (bool) {\n        uint256[] memory how;\n        uint256 intsLength = _how.length / 32;\n        assembly {\n            how := _how // forced casting\n            mstore(how, intsLength)\n        }\n        // _how is invalid from this point fwd\n        return hasPermission(_who, _where, _what, how);\n    }\n\n    function hasPermission(address _who, address _where, bytes32 _what, uint256[] memory _how) public view returns (bool) {\n        bytes32 whoParams = permissions[permissionHash(_who, _where, _what)];\n        if (whoParams != bytes32(0) && evalParams(whoParams, _who, _where, _what, _how)) {\n            return true;\n        }\n\n        bytes32 anyParams = permissions[permissionHash(ANY_ENTITY, _where, _what)];\n        if (anyParams != bytes32(0) && evalParams(anyParams, ANY_ENTITY, _where, _what, _how)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    function hasPermission(address _who, address _where, bytes32 _what) public view returns (bool) {\n        uint256[] memory empty = new uint256[](0);\n        return hasPermission(_who, _where, _what, empty);\n    }\n\n    /**\n    * @dev Internal createPermission for access inside the kernel (on instantiation)\n    */\n    function _createPermission(address _entity, address _app, bytes32 _role, address _manager) internal {\n        // only allow permission creation (or re-creation) when there is no manager\n        require(getPermissionManager(_app, _role) == address(0));\n\n        _setPermission(_entity, _app, _role, EMPTY_PARAM_HASH);\n        _setPermissionManager(_manager, _app, _role);\n    }\n\n    /**\n    * @dev Internal function called to actually save the permission\n    */\n    function _setPermission(address _entity, address _app, bytes32 _role, bytes32 _paramsHash) internal {\n        permissions[permissionHash(_entity, _app, _role)] = _paramsHash;\n\n        SetPermission(_entity, _app, _role, _paramsHash != bytes32(0));\n    }\n\n    function _saveParams(uint256[] _encodedParams) internal returns (bytes32) {\n        bytes32 paramHash = keccak256(_encodedParams);\n        Param[] storage params = permissionParams[paramHash];\n\n        if (params.length == 0) { // params not saved before\n            for (uint256 i = 0; i < _encodedParams.length; i++) {\n                uint256 encodedParam = _encodedParams[i];\n                Param memory param = Param(decodeParamId(encodedParam), decodeParamOp(encodedParam), uint240(encodedParam));\n                params.push(param);\n            }\n        }\n\n        return paramHash;\n    }\n\n    function evalParams(\n        bytes32 _paramsHash,\n        address _who,\n        address _where,\n        bytes32 _what,\n        uint256[] _how\n    ) internal view returns (bool)\n    {\n        if (_paramsHash == EMPTY_PARAM_HASH) {\n            return true;\n        }\n\n        return evalParam(_paramsHash, 0, _who, _where, _what, _how);\n    }\n\n    function evalParam(\n        bytes32 _paramsHash,\n        uint32 _paramId,\n        address _who,\n        address _where,\n        bytes32 _what,\n        uint256[] _how\n    ) internal view returns (bool)\n    {\n        if (_paramId >= permissionParams[_paramsHash].length) {\n            return false; // out of bounds\n        }\n\n        Param memory param = permissionParams[_paramsHash][_paramId];\n\n        if (param.id == LOGIC_OP_PARAM_ID) {\n            return evalLogic(param, _paramsHash, _who, _where, _what, _how);\n        }\n\n        uint256 value;\n        uint256 comparedTo = uint256(param.value);\n\n        // get value\n        if (param.id == ORACLE_PARAM_ID) {\n            value = ACLOracle(param.value).canPerform(_who, _where, _what) ? 1 : 0;\n            comparedTo = 1;\n        } else if (param.id == BLOCK_NUMBER_PARAM_ID) {\n            value = blockN();\n        } else if (param.id == TIMESTAMP_PARAM_ID) {\n            value = time();\n        } else if (param.id == SENDER_PARAM_ID) {\n            value = uint256(msg.sender);\n        } else if (param.id == PARAM_VALUE_PARAM_ID) {\n            value = uint256(param.value);\n        } else {\n            if (param.id >= _how.length) {\n                return false;\n            }\n            value = uint256(uint240(_how[param.id])); // force lost precision\n        }\n\n        if (Op(param.op) == Op.RET) {\n            return uint256(value) > 0;\n        }\n\n        return compare(value, Op(param.op), comparedTo);\n    }\n\n    function evalLogic(Param _param, bytes32 _paramsHash, address _who, address _where, bytes32 _what, uint256[] _how) internal view returns (bool) {\n        if (Op(_param.op) == Op.IF_ELSE) {\n            var (condition, success, failure) = decodeParamsList(uint256(_param.value));\n            bool result = evalParam(_paramsHash, condition, _who, _where, _what, _how);\n\n            return evalParam(_paramsHash, result ? success : failure, _who, _where, _what, _how);\n        }\n\n        var (v1, v2,) = decodeParamsList(uint256(_param.value));\n        bool r1 = evalParam(_paramsHash, v1, _who, _where, _what, _how);\n\n        if (Op(_param.op) == Op.NOT) {\n            return !r1;\n        }\n\n        if (r1 && Op(_param.op) == Op.OR) {\n            return true;\n        }\n\n        if (!r1 && Op(_param.op) == Op.AND) {\n            return false;\n        }\n\n        bool r2 = evalParam(_paramsHash, v2, _who, _where, _what, _how);\n\n        if (Op(_param.op) == Op.XOR) {\n            return (r1 && !r2) || (!r1 && r2);\n        }\n\n        return r2; // both or and and depend on result of r2 after checks\n    }\n\n    function compare(uint256 _a, Op _op, uint256 _b) internal pure returns (bool) {\n        if (_op == Op.EQ)  return _a == _b;                              // solium-disable-line lbrace\n        if (_op == Op.NEQ) return _a != _b;                              // solium-disable-line lbrace\n        if (_op == Op.GT)  return _a > _b;                               // solium-disable-line lbrace\n        if (_op == Op.LT)  return _a < _b;                               // solium-disable-line lbrace\n        if (_op == Op.GTE) return _a >= _b;                              // solium-disable-line lbrace\n        if (_op == Op.LTE) return _a <= _b;                              // solium-disable-line lbrace\n        return false;\n    }\n\n    /**\n    * @dev Internal function that sets management\n    */\n    function _setPermissionManager(address _newManager, address _app, bytes32 _role) internal {\n        permissionManager[roleHash(_app, _role)] = _newManager;\n        ChangePermissionManager(_app, _role, _newManager);\n    }\n\n    function roleHash(address _where, bytes32 _what) pure internal returns (bytes32) {\n        return keccak256(uint256(1), _where, _what);\n    }\n\n    function permissionHash(address _who, address _where, bytes32 _what) pure internal returns (bytes32) {\n        return keccak256(uint256(2), _who, _where, _what);\n    }\n\n    function time() internal view returns (uint64) { return uint64(block.timestamp); } // solium-disable-line security/no-block-members\n\n    function blockN() internal view returns (uint256) { return block.number; }\n}\n",
  "sourcePath": "@aragon/os/contracts/acl/ACL.sol",
  "ast": {
    "attributes": {
      "absolutePath": "@aragon/os/contracts/acl/ACL.sol",
      "exportedSymbols": {
        "ACL": [
          5510
        ],
        "ACLOracle": [
          4414
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "0.4",
            ".18"
          ]
        },
        "id": 4399,
        "name": "PragmaDirective",
        "src": "0:23:11"
      },
      {
        "attributes": {
          "SourceUnit": 6969,
          "absolutePath": "@aragon/os/contracts/apps/AragonApp.sol",
          "file": "../apps/AragonApp.sol",
          "scope": 5511,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4400,
        "name": "ImportDirective",
        "src": "25:31:11"
      },
      {
        "attributes": {
          "SourceUnit": 5981,
          "absolutePath": "@aragon/os/contracts/acl/ACLSyntaxSugar.sol",
          "file": "./ACLSyntaxSugar.sol",
          "scope": 5511,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4401,
        "name": "ImportDirective",
        "src": "57:30:11"
      },
      {
        "attributes": {
          "SourceUnit": 6002,
          "absolutePath": "@aragon/os/contracts/acl/IACL.sol",
          "file": "./IACL.sol",
          "scope": 5511,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4402,
        "name": "ImportDirective",
        "src": "88:20:11"
      },
      {
        "attributes": {
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "interface",
          "documentation": null,
          "fullyImplemented": false,
          "linearizedBaseContracts": [
            4414
          ],
          "name": "ACLOracle",
          "scope": 5511
        },
        "children": [
          {
            "attributes": {
              "body": null,
              "constant": true,
              "implemented": false,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "canPerform",
              "payable": false,
              "scope": 4414,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "who",
                      "scope": 4413,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4403,
                        "name": "ElementaryTypeName",
                        "src": "157:7:11"
                      }
                    ],
                    "id": 4404,
                    "name": "VariableDeclaration",
                    "src": "157:11:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "where",
                      "scope": 4413,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4405,
                        "name": "ElementaryTypeName",
                        "src": "170:7:11"
                      }
                    ],
                    "id": 4406,
                    "name": "VariableDeclaration",
                    "src": "170:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "what",
                      "scope": 4413,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4407,
                        "name": "ElementaryTypeName",
                        "src": "185:7:11"
                      }
                    ],
                    "id": 4408,
                    "name": "VariableDeclaration",
                    "src": "185:12:11"
                  }
                ],
                "id": 4409,
                "name": "ParameterList",
                "src": "156:42:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4413,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4410,
                        "name": "ElementaryTypeName",
                        "src": "220:4:11"
                      }
                    ],
                    "id": 4411,
                    "name": "VariableDeclaration",
                    "src": "220:4:11"
                  }
                ],
                "id": 4412,
                "name": "ParameterList",
                "src": "219:6:11"
              }
            ],
            "id": 4413,
            "name": "FunctionDefinition",
            "src": "137:89:11"
          }
        ],
        "id": 4414,
        "name": "ContractDefinition",
        "src": "111:117:11"
      },
      {
        "attributes": {
          "contractDependencies": [
            5905,
            5980,
            6001,
            6870,
            6968,
            7261,
            7846,
            7877
          ],
          "contractKind": "contract",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            5510,
            5980,
            6968,
            7846,
            7877,
            5905,
            7261,
            6870,
            6001
          ],
          "name": "ACL",
          "scope": 5511
        },
        "children": [
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "IACL",
                  "referencedDeclaration": 6001,
                  "type": "contract IACL"
                },
                "id": 4415,
                "name": "UserDefinedTypeName",
                "src": "247:4:11"
              }
            ],
            "id": 4416,
            "name": "InheritanceSpecifier",
            "src": "247:4:11"
          },
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "AragonApp",
                  "referencedDeclaration": 6968,
                  "type": "contract AragonApp"
                },
                "id": 4417,
                "name": "UserDefinedTypeName",
                "src": "253:9:11"
              }
            ],
            "id": 4418,
            "name": "InheritanceSpecifier",
            "src": "253:9:11"
          },
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ACLHelpers",
                  "referencedDeclaration": 5980,
                  "type": "contract ACLHelpers"
                },
                "id": 4419,
                "name": "UserDefinedTypeName",
                "src": "264:10:11"
              }
            ],
            "id": 4420,
            "name": "InheritanceSpecifier",
            "src": "264:10:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "CREATE_PERMISSIONS_ROLE",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 4421,
                "name": "ElementaryTypeName",
                "src": "281:7:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "bytes32",
                  "type_conversion": false
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_0b719b33c83b8e5d300c521cb8b54ae9bd933996a14bef8c2f4e0285d2d2400a",
                          "typeString": "literal_string \"CREATE_PERMISSIONS_ROLE\""
                        }
                      ],
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 12584,
                      "type": "function () pure returns (bytes32)",
                      "value": "keccak256"
                    },
                    "id": 4422,
                    "name": "Identifier",
                    "src": "331:9:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "4352454154455f5045524d495353494f4e535f524f4c45",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"CREATE_PERMISSIONS_ROLE\"",
                      "value": "CREATE_PERMISSIONS_ROLE"
                    },
                    "id": 4423,
                    "name": "Literal",
                    "src": "341:25:11"
                  }
                ],
                "id": 4424,
                "name": "FunctionCall",
                "src": "331:36:11"
              }
            ],
            "id": 4425,
            "name": "VariableDeclaration",
            "src": "281:86:11"
          },
          {
            "attributes": {
              "constant": false,
              "name": "permissions",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(bytes32 => bytes32)",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(bytes32 => bytes32)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 4426,
                    "name": "ElementaryTypeName",
                    "src": "432:7:11"
                  },
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 4427,
                    "name": "ElementaryTypeName",
                    "src": "443:7:11"
                  }
                ],
                "id": 4428,
                "name": "Mapping",
                "src": "423:28:11"
              }
            ],
            "id": 4429,
            "name": "VariableDeclaration",
            "src": "423:40:11"
          },
          {
            "attributes": {
              "constant": false,
              "name": "permissionParams",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 4430,
                    "name": "ElementaryTypeName",
                    "src": "519:7:11"
                  },
                  {
                    "attributes": {
                      "length": null,
                      "type": "struct ACL.Param storage ref[] storage pointer"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Param",
                          "referencedDeclaration": 4459,
                          "type": "struct ACL.Param storage pointer"
                        },
                        "id": 4431,
                        "name": "UserDefinedTypeName",
                        "src": "530:5:11"
                      }
                    ],
                    "id": 4432,
                    "name": "ArrayTypeName",
                    "src": "530:7:11"
                  }
                ],
                "id": 4433,
                "name": "Mapping",
                "src": "510:28:11"
              }
            ],
            "id": 4434,
            "name": "VariableDeclaration",
            "src": "510:52:11"
          },
          {
            "attributes": {
              "constant": false,
              "name": "permissionManager",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(bytes32 => address)",
              "value": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(bytes32 => address)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 4435,
                    "name": "ElementaryTypeName",
                    "src": "620:7:11"
                  },
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 4436,
                    "name": "ElementaryTypeName",
                    "src": "631:7:11"
                  }
                ],
                "id": 4437,
                "name": "Mapping",
                "src": "611:28:11"
              }
            ],
            "id": 4438,
            "name": "VariableDeclaration",
            "src": "611:46:11"
          },
          {
            "attributes": {
              "canonicalName": "ACL.Op",
              "name": "Op"
            },
            "children": [
              {
                "attributes": {
                  "name": "NONE"
                },
                "id": 4439,
                "name": "EnumValue",
                "src": "674:4:11"
              },
              {
                "attributes": {
                  "name": "EQ"
                },
                "id": 4440,
                "name": "EnumValue",
                "src": "680:2:11"
              },
              {
                "attributes": {
                  "name": "NEQ"
                },
                "id": 4441,
                "name": "EnumValue",
                "src": "684:3:11"
              },
              {
                "attributes": {
                  "name": "GT"
                },
                "id": 4442,
                "name": "EnumValue",
                "src": "689:2:11"
              },
              {
                "attributes": {
                  "name": "LT"
                },
                "id": 4443,
                "name": "EnumValue",
                "src": "693:2:11"
              },
              {
                "attributes": {
                  "name": "GTE"
                },
                "id": 4444,
                "name": "EnumValue",
                "src": "697:3:11"
              },
              {
                "attributes": {
                  "name": "LTE"
                },
                "id": 4445,
                "name": "EnumValue",
                "src": "702:3:11"
              },
              {
                "attributes": {
                  "name": "NOT"
                },
                "id": 4446,
                "name": "EnumValue",
                "src": "707:3:11"
              },
              {
                "attributes": {
                  "name": "AND"
                },
                "id": 4447,
                "name": "EnumValue",
                "src": "712:3:11"
              },
              {
                "attributes": {
                  "name": "OR"
                },
                "id": 4448,
                "name": "EnumValue",
                "src": "717:2:11"
              },
              {
                "attributes": {
                  "name": "XOR"
                },
                "id": 4449,
                "name": "EnumValue",
                "src": "721:3:11"
              },
              {
                "attributes": {
                  "name": "IF_ELSE"
                },
                "id": 4450,
                "name": "EnumValue",
                "src": "726:7:11"
              },
              {
                "attributes": {
                  "name": "RET"
                },
                "id": 4451,
                "name": "EnumValue",
                "src": "735:3:11"
              }
            ],
            "id": 4452,
            "name": "EnumDefinition",
            "src": "664:76:11"
          },
          {
            "attributes": {
              "canonicalName": "ACL.Param",
              "name": "Param",
              "scope": 5510,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "id",
                  "scope": 4459,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint8",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint8",
                      "type": "uint8"
                    },
                    "id": 4453,
                    "name": "ElementaryTypeName",
                    "src": "781:5:11"
                  }
                ],
                "id": 4454,
                "name": "VariableDeclaration",
                "src": "781:8:11"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "op",
                  "scope": 4459,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint8",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint8",
                      "type": "uint8"
                    },
                    "id": 4455,
                    "name": "ElementaryTypeName",
                    "src": "799:5:11"
                  }
                ],
                "id": 4456,
                "name": "VariableDeclaration",
                "src": "799:8:11"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "value",
                  "scope": 4459,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint240",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint240",
                      "type": "uint240"
                    },
                    "id": 4457,
                    "name": "ElementaryTypeName",
                    "src": "817:7:11"
                  }
                ],
                "id": 4458,
                "name": "VariableDeclaration",
                "src": "817:13:11"
              }
            ],
            "id": 4459,
            "name": "StructDefinition",
            "src": "758:299:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "BLOCK_NUMBER_PARAM_ID",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint8",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint8",
                  "type": "uint8"
                },
                "id": 4460,
                "name": "ElementaryTypeName",
                "src": "1063:5:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "323030",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 200",
                  "value": "200"
                },
                "id": 4461,
                "name": "Literal",
                "src": "1102:3:11"
              }
            ],
            "id": 4462,
            "name": "VariableDeclaration",
            "src": "1063:42:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "TIMESTAMP_PARAM_ID",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint8",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint8",
                  "type": "uint8"
                },
                "id": 4463,
                "name": "ElementaryTypeName",
                "src": "1111:5:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "323031",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 201",
                  "value": "201"
                },
                "id": 4464,
                "name": "Literal",
                "src": "1150:3:11"
              }
            ],
            "id": 4465,
            "name": "VariableDeclaration",
            "src": "1111:42:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "SENDER_PARAM_ID",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint8",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint8",
                  "type": "uint8"
                },
                "id": 4466,
                "name": "ElementaryTypeName",
                "src": "1159:5:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "323032",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 202",
                  "value": "202"
                },
                "id": 4467,
                "name": "Literal",
                "src": "1198:3:11"
              }
            ],
            "id": 4468,
            "name": "VariableDeclaration",
            "src": "1159:42:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "ORACLE_PARAM_ID",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint8",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint8",
                  "type": "uint8"
                },
                "id": 4469,
                "name": "ElementaryTypeName",
                "src": "1207:5:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "323033",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 203",
                  "value": "203"
                },
                "id": 4470,
                "name": "Literal",
                "src": "1246:3:11"
              }
            ],
            "id": 4471,
            "name": "VariableDeclaration",
            "src": "1207:42:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "LOGIC_OP_PARAM_ID",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint8",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint8",
                  "type": "uint8"
                },
                "id": 4472,
                "name": "ElementaryTypeName",
                "src": "1255:5:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "323034",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 204",
                  "value": "204"
                },
                "id": 4473,
                "name": "Literal",
                "src": "1294:3:11"
              }
            ],
            "id": 4474,
            "name": "VariableDeclaration",
            "src": "1255:42:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "PARAM_VALUE_PARAM_ID",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "uint8",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "uint8",
                  "type": "uint8"
                },
                "id": 4475,
                "name": "ElementaryTypeName",
                "src": "1303:5:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "hexvalue": "323035",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "subdenomination": null,
                  "token": "number",
                  "type": "int_const 205",
                  "value": "205"
                },
                "id": 4476,
                "name": "Literal",
                "src": "1342:3:11"
              }
            ],
            "id": 4477,
            "name": "VariableDeclaration",
            "src": "1303:42:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "EMPTY_PARAM_HASH",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes32",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes32",
                  "type": "bytes32"
                },
                "id": 4478,
                "name": "ElementaryTypeName",
                "src": "1397:7:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "bytes32",
                  "type_conversion": false
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 12584,
                      "type": "function () pure returns (bytes32)",
                      "value": "keccak256"
                    },
                    "id": 4479,
                    "name": "Identifier",
                    "src": "1440:9:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "isStructConstructorCall": false,
                      "lValueRequested": false,
                      "names": [
                        null
                      ],
                      "type": "uint256",
                      "type_conversion": true
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "type": "type(uint256)",
                          "value": "uint256"
                        },
                        "id": 4480,
                        "name": "ElementaryTypeNameExpression",
                        "src": "1450:7:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "30",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 0",
                          "value": "0"
                        },
                        "id": 4481,
                        "name": "Literal",
                        "src": "1458:1:11"
                      }
                    ],
                    "id": 4482,
                    "name": "FunctionCall",
                    "src": "1450:10:11"
                  }
                ],
                "id": 4483,
                "name": "FunctionCall",
                "src": "1440:21:11"
              }
            ],
            "id": 4484,
            "name": "VariableDeclaration",
            "src": "1397:64:11"
          },
          {
            "attributes": {
              "constant": true,
              "name": "ANY_ENTITY",
              "scope": 5510,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "type": "address"
                },
                "id": 4485,
                "name": "ElementaryTypeName",
                "src": "1467:7:11"
              },
              {
                "attributes": {
                  "argumentTypes": null,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "isStructConstructorCall": false,
                  "lValueRequested": false,
                  "names": [
                    null
                  ],
                  "type": "address",
                  "type_conversion": true
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_-1_by_1",
                          "typeString": "int_const -1"
                        }
                      ],
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "type": "type(address)",
                      "value": "address"
                    },
                    "id": 4486,
                    "name": "ElementaryTypeNameExpression",
                    "src": "1497:7:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "operator": "-",
                      "prefix": true,
                      "type": "int_const -1"
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "31",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "number",
                          "type": "int_const 1",
                          "value": "1"
                        },
                        "id": 4487,
                        "name": "Literal",
                        "src": "1506:1:11"
                      }
                    ],
                    "id": 4488,
                    "name": "UnaryOperation",
                    "src": "1505:2:11"
                  }
                ],
                "id": 4489,
                "name": "FunctionCall",
                "src": "1497:11:11"
              }
            ],
            "id": 4490,
            "name": "VariableDeclaration",
            "src": "1467:41:11"
          },
          {
            "attributes": {
              "name": "onlyPermissionManager",
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4508,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4491,
                        "name": "ElementaryTypeName",
                        "src": "1546:7:11"
                      }
                    ],
                    "id": 4492,
                    "name": "VariableDeclaration",
                    "src": "1546:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4508,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4493,
                        "name": "ElementaryTypeName",
                        "src": "1560:7:11"
                      }
                    ],
                    "id": 4494,
                    "name": "VariableDeclaration",
                    "src": "1560:13:11"
                  }
                ],
                "id": 4495,
                "name": "ParameterList",
                "src": "1545:29:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 4496,
                            "name": "Identifier",
                            "src": "1585:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12590,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 4497,
                                    "name": "Identifier",
                                    "src": "1593:3:11"
                                  }
                                ],
                                "id": 4498,
                                "name": "MemberAccess",
                                "src": "1593:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4717,
                                      "type": "function (address,bytes32) view returns (address)",
                                      "value": "getPermissionManager"
                                    },
                                    "id": 4499,
                                    "name": "Identifier",
                                    "src": "1607:20:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4492,
                                      "type": "address",
                                      "value": "_app"
                                    },
                                    "id": 4500,
                                    "name": "Identifier",
                                    "src": "1628:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4494,
                                      "type": "bytes32",
                                      "value": "_role"
                                    },
                                    "id": 4501,
                                    "name": "Identifier",
                                    "src": "1634:5:11"
                                  }
                                ],
                                "id": 4502,
                                "name": "FunctionCall",
                                "src": "1607:33:11"
                              }
                            ],
                            "id": 4503,
                            "name": "BinaryOperation",
                            "src": "1593:47:11"
                          }
                        ],
                        "id": 4504,
                        "name": "FunctionCall",
                        "src": "1585:56:11"
                      }
                    ],
                    "id": 4505,
                    "name": "ExpressionStatement",
                    "src": "1585:56:11"
                  },
                  {
                    "id": 4506,
                    "name": "PlaceholderStatement",
                    "src": "1651:1:11"
                  }
                ],
                "id": 4507,
                "name": "Block",
                "src": "1575:84:11"
              }
            ],
            "id": 4508,
            "name": "ModifierDefinition",
            "src": "1515:144:11"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "SetPermission"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "entity",
                      "scope": 4518,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4509,
                        "name": "ElementaryTypeName",
                        "src": "1685:7:11"
                      }
                    ],
                    "id": 4510,
                    "name": "VariableDeclaration",
                    "src": "1685:22:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "app",
                      "scope": 4518,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4511,
                        "name": "ElementaryTypeName",
                        "src": "1709:7:11"
                      }
                    ],
                    "id": 4512,
                    "name": "VariableDeclaration",
                    "src": "1709:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "role",
                      "scope": 4518,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4513,
                        "name": "ElementaryTypeName",
                        "src": "1730:7:11"
                      }
                    ],
                    "id": 4514,
                    "name": "VariableDeclaration",
                    "src": "1730:20:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "allowed",
                      "scope": 4518,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4515,
                        "name": "ElementaryTypeName",
                        "src": "1752:4:11"
                      }
                    ],
                    "id": 4516,
                    "name": "VariableDeclaration",
                    "src": "1752:12:11"
                  }
                ],
                "id": 4517,
                "name": "ParameterList",
                "src": "1684:81:11"
              }
            ],
            "id": 4518,
            "name": "EventDefinition",
            "src": "1665:101:11"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ChangePermissionManager"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "app",
                      "scope": 4526,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4519,
                        "name": "ElementaryTypeName",
                        "src": "1801:7:11"
                      }
                    ],
                    "id": 4520,
                    "name": "VariableDeclaration",
                    "src": "1801:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "role",
                      "scope": 4526,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4521,
                        "name": "ElementaryTypeName",
                        "src": "1822:7:11"
                      }
                    ],
                    "id": 4522,
                    "name": "VariableDeclaration",
                    "src": "1822:20:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "manager",
                      "scope": 4526,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4523,
                        "name": "ElementaryTypeName",
                        "src": "1844:7:11"
                      }
                    ],
                    "id": 4524,
                    "name": "VariableDeclaration",
                    "src": "1844:23:11"
                  }
                ],
                "id": 4525,
                "name": "ParameterList",
                "src": "1800:68:11"
              }
            ],
            "id": 4526,
            "name": "EventDefinition",
            "src": "1771:98:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "initialize",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": 5987,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_permissionsCreator",
                      "scope": 4553,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4527,
                        "name": "ElementaryTypeName",
                        "src": "2225:7:11"
                      }
                    ],
                    "id": 4528,
                    "name": "VariableDeclaration",
                    "src": "2225:27:11"
                  }
                ],
                "id": 4529,
                "name": "ParameterList",
                "src": "2224:29:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4532,
                "name": "ParameterList",
                "src": "2270:0:11"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 7232,
                      "type": "modifier ()",
                      "value": "onlyInit"
                    },
                    "id": 4530,
                    "name": "Identifier",
                    "src": "2254:8:11"
                  }
                ],
                "id": 4531,
                "name": "ModifierInvocation",
                "src": "2254:8:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 7251,
                              "type": "function ()",
                              "value": "initialized"
                            },
                            "id": 4533,
                            "name": "Identifier",
                            "src": "2280:11:11"
                          }
                        ],
                        "id": 4534,
                        "name": "FunctionCall",
                        "src": "2280:13:11"
                      }
                    ],
                    "id": 4535,
                    "name": "ExpressionStatement",
                    "src": "2280:13:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 4536,
                            "name": "Identifier",
                            "src": "2303:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12590,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 4537,
                                    "name": "Identifier",
                                    "src": "2311:3:11"
                                  }
                                ],
                                "id": 4538,
                                "name": "MemberAccess",
                                "src": "2311:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_IKernel_$9550",
                                          "typeString": "contract IKernel"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 4539,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "2325:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6857,
                                      "type": "contract IKernel",
                                      "value": "kernel"
                                    },
                                    "id": 4540,
                                    "name": "Identifier",
                                    "src": "2333:6:11"
                                  }
                                ],
                                "id": 4541,
                                "name": "FunctionCall",
                                "src": "2325:15:11"
                              }
                            ],
                            "id": 4542,
                            "name": "BinaryOperation",
                            "src": "2311:29:11"
                          }
                        ],
                        "id": 4543,
                        "name": "FunctionCall",
                        "src": "2303:38:11"
                      }
                    ],
                    "id": 4544,
                    "name": "ExpressionStatement",
                    "src": "2303:38:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_contract$_ACL_$5510",
                                  "typeString": "contract ACL"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4887,
                              "type": "function (address,address,bytes32,address)",
                              "value": "_createPermission"
                            },
                            "id": 4545,
                            "name": "Identifier",
                            "src": "2352:17:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4528,
                              "type": "address",
                              "value": "_permissionsCreator"
                            },
                            "id": 4546,
                            "name": "Identifier",
                            "src": "2370:19:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12651,
                              "type": "contract ACL",
                              "value": "this"
                            },
                            "id": 4547,
                            "name": "Identifier",
                            "src": "2391:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4425,
                              "type": "bytes32",
                              "value": "CREATE_PERMISSIONS_ROLE"
                            },
                            "id": 4548,
                            "name": "Identifier",
                            "src": "2397:23:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4528,
                              "type": "address",
                              "value": "_permissionsCreator"
                            },
                            "id": 4549,
                            "name": "Identifier",
                            "src": "2422:19:11"
                          }
                        ],
                        "id": 4550,
                        "name": "FunctionCall",
                        "src": "2352:90:11"
                      }
                    ],
                    "id": 4551,
                    "name": "ExpressionStatement",
                    "src": "2352:90:11"
                  }
                ],
                "id": 4552,
                "name": "Block",
                "src": "2270:179:11"
              }
            ],
            "id": 4553,
            "name": "FunctionDefinition",
            "src": "2205:244:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "createPermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_entity",
                      "scope": 4583,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4554,
                        "name": "ElementaryTypeName",
                        "src": "3242:7:11"
                      }
                    ],
                    "id": 4555,
                    "name": "VariableDeclaration",
                    "src": "3242:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4583,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4556,
                        "name": "ElementaryTypeName",
                        "src": "3259:7:11"
                      }
                    ],
                    "id": 4557,
                    "name": "VariableDeclaration",
                    "src": "3259:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4583,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4558,
                        "name": "ElementaryTypeName",
                        "src": "3273:7:11"
                      }
                    ],
                    "id": 4559,
                    "name": "VariableDeclaration",
                    "src": "3273:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_manager",
                      "scope": 4583,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4560,
                        "name": "ElementaryTypeName",
                        "src": "3288:7:11"
                      }
                    ],
                    "id": 4561,
                    "name": "VariableDeclaration",
                    "src": "3288:16:11"
                  }
                ],
                "id": 4562,
                "name": "ParameterList",
                "src": "3241:64:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4563,
                "name": "ParameterList",
                "src": "3315:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 4564,
                            "name": "Identifier",
                            "src": "3325:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    4751,
                                    4822,
                                    4851
                                  ],
                                  "referencedDeclaration": 4851,
                                  "type": "function (address,address,bytes32) view returns (bool)",
                                  "value": "hasPermission"
                                },
                                "id": 4565,
                                "name": "Identifier",
                                "src": "3333:13:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12590,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 4566,
                                    "name": "Identifier",
                                    "src": "3347:3:11"
                                  }
                                ],
                                "id": 4567,
                                "name": "MemberAccess",
                                "src": "3347:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_contract$_ACL_$5510",
                                          "typeString": "contract ACL"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 4568,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3359:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 12651,
                                      "type": "contract ACL",
                                      "value": "this"
                                    },
                                    "id": 4569,
                                    "name": "Identifier",
                                    "src": "3367:4:11"
                                  }
                                ],
                                "id": 4570,
                                "name": "FunctionCall",
                                "src": "3359:13:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4425,
                                  "type": "bytes32",
                                  "value": "CREATE_PERMISSIONS_ROLE"
                                },
                                "id": 4571,
                                "name": "Identifier",
                                "src": "3374:23:11"
                              }
                            ],
                            "id": 4572,
                            "name": "FunctionCall",
                            "src": "3333:65:11"
                          }
                        ],
                        "id": 4573,
                        "name": "FunctionCall",
                        "src": "3325:74:11"
                      }
                    ],
                    "id": 4574,
                    "name": "ExpressionStatement",
                    "src": "3325:74:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4887,
                              "type": "function (address,address,bytes32,address)",
                              "value": "_createPermission"
                            },
                            "id": 4575,
                            "name": "Identifier",
                            "src": "3410:17:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4555,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 4576,
                            "name": "Identifier",
                            "src": "3428:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4557,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4577,
                            "name": "Identifier",
                            "src": "3437:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4559,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4578,
                            "name": "Identifier",
                            "src": "3443:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4561,
                              "type": "address",
                              "value": "_manager"
                            },
                            "id": 4579,
                            "name": "Identifier",
                            "src": "3450:8:11"
                          }
                        ],
                        "id": 4580,
                        "name": "FunctionCall",
                        "src": "3410:49:11"
                      }
                    ],
                    "id": 4581,
                    "name": "ExpressionStatement",
                    "src": "3410:49:11"
                  }
                ],
                "id": 4582,
                "name": "Block",
                "src": "3315:151:11"
              }
            ],
            "id": 4583,
            "name": "FunctionDefinition",
            "src": "3216:250:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "grantPermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_entity",
                      "scope": 4604,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4584,
                        "name": "ElementaryTypeName",
                        "src": "3990:7:11"
                      }
                    ],
                    "id": 4585,
                    "name": "VariableDeclaration",
                    "src": "3990:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4604,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4586,
                        "name": "ElementaryTypeName",
                        "src": "4007:7:11"
                      }
                    ],
                    "id": 4587,
                    "name": "VariableDeclaration",
                    "src": "4007:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4604,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4588,
                        "name": "ElementaryTypeName",
                        "src": "4021:7:11"
                      }
                    ],
                    "id": 4589,
                    "name": "VariableDeclaration",
                    "src": "4021:13:11"
                  }
                ],
                "id": 4590,
                "name": "ParameterList",
                "src": "3989:46:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4591,
                "name": "ParameterList",
                "src": "4057:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                                  "typeString": "uint256[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4649,
                              "type": "function (address,address,bytes32,uint256[] memory)",
                              "value": "grantPermissionP"
                            },
                            "id": 4592,
                            "name": "Identifier",
                            "src": "4067:16:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4585,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 4593,
                            "name": "Identifier",
                            "src": "4084:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4587,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4594,
                            "name": "Identifier",
                            "src": "4093:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4589,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4595,
                            "name": "Identifier",
                            "src": "4099:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256[] memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "function (uint256) pure returns (uint256[] memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "length": null,
                                      "type": "uint256[] storage pointer"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint256",
                                          "type": "uint256"
                                        },
                                        "id": 4596,
                                        "name": "ElementaryTypeName",
                                        "src": "4110:7:11"
                                      }
                                    ],
                                    "id": 4597,
                                    "name": "ArrayTypeName",
                                    "src": "4110:9:11"
                                  }
                                ],
                                "id": 4598,
                                "name": "NewExpression",
                                "src": "4106:13:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4599,
                                "name": "Literal",
                                "src": "4120:1:11"
                              }
                            ],
                            "id": 4600,
                            "name": "FunctionCall",
                            "src": "4106:16:11"
                          }
                        ],
                        "id": 4601,
                        "name": "FunctionCall",
                        "src": "4067:56:11"
                      }
                    ],
                    "id": 4602,
                    "name": "ExpressionStatement",
                    "src": "4067:56:11"
                  }
                ],
                "id": 4603,
                "name": "Block",
                "src": "4057:73:11"
              }
            ],
            "id": 4604,
            "name": "FunctionDefinition",
            "src": "3965:165:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "grantPermissionP",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_entity",
                      "scope": 4649,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4605,
                        "name": "ElementaryTypeName",
                        "src": "4716:7:11"
                      }
                    ],
                    "id": 4606,
                    "name": "VariableDeclaration",
                    "src": "4716:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4649,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4607,
                        "name": "ElementaryTypeName",
                        "src": "4733:7:11"
                      }
                    ],
                    "id": 4608,
                    "name": "VariableDeclaration",
                    "src": "4733:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4649,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4609,
                        "name": "ElementaryTypeName",
                        "src": "4747:7:11"
                      }
                    ],
                    "id": 4610,
                    "name": "VariableDeclaration",
                    "src": "4747:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_params",
                      "scope": 4649,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4611,
                            "name": "ElementaryTypeName",
                            "src": "4762:7:11"
                          }
                        ],
                        "id": 4612,
                        "name": "ArrayTypeName",
                        "src": "4762:9:11"
                      }
                    ],
                    "id": 4613,
                    "name": "VariableDeclaration",
                    "src": "4762:17:11"
                  }
                ],
                "id": 4614,
                "name": "ParameterList",
                "src": "4715:65:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4619,
                "name": "ParameterList",
                "src": "4843:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4508,
                      "type": "modifier (address,bytes32)",
                      "value": "onlyPermissionManager"
                    },
                    "id": 4615,
                    "name": "Identifier",
                    "src": "4789:21:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4608,
                      "type": "address",
                      "value": "_app"
                    },
                    "id": 4616,
                    "name": "Identifier",
                    "src": "4811:4:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4610,
                      "type": "bytes32",
                      "value": "_role"
                    },
                    "id": 4617,
                    "name": "Identifier",
                    "src": "4817:5:11"
                  }
                ],
                "id": 4618,
                "name": "ModifierInvocation",
                "src": "4789:34:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 4620,
                            "name": "Identifier",
                            "src": "4853:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        4751,
                                        4822,
                                        4851
                                      ],
                                      "referencedDeclaration": 4851,
                                      "type": "function (address,address,bytes32) view returns (bool)",
                                      "value": "hasPermission"
                                    },
                                    "id": 4621,
                                    "name": "Identifier",
                                    "src": "4862:13:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4606,
                                      "type": "address",
                                      "value": "_entity"
                                    },
                                    "id": 4622,
                                    "name": "Identifier",
                                    "src": "4876:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4608,
                                      "type": "address",
                                      "value": "_app"
                                    },
                                    "id": 4623,
                                    "name": "Identifier",
                                    "src": "4885:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4610,
                                      "type": "bytes32",
                                      "value": "_role"
                                    },
                                    "id": 4624,
                                    "name": "Identifier",
                                    "src": "4891:5:11"
                                  }
                                ],
                                "id": 4625,
                                "name": "FunctionCall",
                                "src": "4862:35:11"
                              }
                            ],
                            "id": 4626,
                            "name": "UnaryOperation",
                            "src": "4861:36:11"
                          }
                        ],
                        "id": 4627,
                        "name": "FunctionCall",
                        "src": "4853:45:11"
                      }
                    ],
                    "id": 4628,
                    "name": "ExpressionStatement",
                    "src": "4853:45:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4630
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "paramsHash",
                          "scope": 4649,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 4629,
                            "name": "ElementaryTypeName",
                            "src": "4909:7:11"
                          }
                        ],
                        "id": 4630,
                        "name": "VariableDeclaration",
                        "src": "4909:18:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "length",
                                  "referencedDeclaration": null,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4613,
                                      "type": "uint256[] memory",
                                      "value": "_params"
                                    },
                                    "id": 4631,
                                    "name": "Identifier",
                                    "src": "4930:7:11"
                                  }
                                ],
                                "id": 4632,
                                "name": "MemberAccess",
                                "src": "4930:14:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4633,
                                "name": "Literal",
                                "src": "4947:1:11"
                              }
                            ],
                            "id": 4634,
                            "name": "BinaryOperation",
                            "src": "4930:18:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4990,
                                  "type": "function (uint256[] memory) returns (bytes32)",
                                  "value": "_saveParams"
                                },
                                "id": 4635,
                                "name": "Identifier",
                                "src": "4951:11:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4613,
                                  "type": "uint256[] memory",
                                  "value": "_params"
                                },
                                "id": 4636,
                                "name": "Identifier",
                                "src": "4963:7:11"
                              }
                            ],
                            "id": 4637,
                            "name": "FunctionCall",
                            "src": "4951:20:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4484,
                              "type": "bytes32",
                              "value": "EMPTY_PARAM_HASH"
                            },
                            "id": 4638,
                            "name": "Identifier",
                            "src": "4974:16:11"
                          }
                        ],
                        "id": 4639,
                        "name": "Conditional",
                        "src": "4930:60:11"
                      }
                    ],
                    "id": 4640,
                    "name": "VariableDeclarationStatement",
                    "src": "4909:81:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4920,
                              "type": "function (address,address,bytes32,bytes32)",
                              "value": "_setPermission"
                            },
                            "id": 4641,
                            "name": "Identifier",
                            "src": "5000:14:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4606,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 4642,
                            "name": "Identifier",
                            "src": "5015:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4608,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4643,
                            "name": "Identifier",
                            "src": "5024:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4610,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4644,
                            "name": "Identifier",
                            "src": "5030:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4630,
                              "type": "bytes32",
                              "value": "paramsHash"
                            },
                            "id": 4645,
                            "name": "Identifier",
                            "src": "5037:10:11"
                          }
                        ],
                        "id": 4646,
                        "name": "FunctionCall",
                        "src": "5000:48:11"
                      }
                    ],
                    "id": 4647,
                    "name": "ExpressionStatement",
                    "src": "5000:48:11"
                  }
                ],
                "id": 4648,
                "name": "Block",
                "src": "4843:212:11"
              }
            ],
            "id": 4649,
            "name": "FunctionDefinition",
            "src": "4690:365:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "revokePermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_entity",
                      "scope": 4680,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4650,
                        "name": "ElementaryTypeName",
                        "src": "5517:7:11"
                      }
                    ],
                    "id": 4651,
                    "name": "VariableDeclaration",
                    "src": "5517:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4680,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4652,
                        "name": "ElementaryTypeName",
                        "src": "5534:7:11"
                      }
                    ],
                    "id": 4653,
                    "name": "VariableDeclaration",
                    "src": "5534:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4680,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4654,
                        "name": "ElementaryTypeName",
                        "src": "5548:7:11"
                      }
                    ],
                    "id": 4655,
                    "name": "VariableDeclaration",
                    "src": "5548:13:11"
                  }
                ],
                "id": 4656,
                "name": "ParameterList",
                "src": "5516:46:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4661,
                "name": "ParameterList",
                "src": "5627:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4508,
                      "type": "modifier (address,bytes32)",
                      "value": "onlyPermissionManager"
                    },
                    "id": 4657,
                    "name": "Identifier",
                    "src": "5571:21:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4653,
                      "type": "address",
                      "value": "_app"
                    },
                    "id": 4658,
                    "name": "Identifier",
                    "src": "5593:4:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4655,
                      "type": "bytes32",
                      "value": "_role"
                    },
                    "id": 4659,
                    "name": "Identifier",
                    "src": "5599:5:11"
                  }
                ],
                "id": 4660,
                "name": "ModifierInvocation",
                "src": "5571:34:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 4662,
                            "name": "Identifier",
                            "src": "5637:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    4751,
                                    4822,
                                    4851
                                  ],
                                  "referencedDeclaration": 4851,
                                  "type": "function (address,address,bytes32) view returns (bool)",
                                  "value": "hasPermission"
                                },
                                "id": 4663,
                                "name": "Identifier",
                                "src": "5645:13:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4651,
                                  "type": "address",
                                  "value": "_entity"
                                },
                                "id": 4664,
                                "name": "Identifier",
                                "src": "5659:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4653,
                                  "type": "address",
                                  "value": "_app"
                                },
                                "id": 4665,
                                "name": "Identifier",
                                "src": "5668:4:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4655,
                                  "type": "bytes32",
                                  "value": "_role"
                                },
                                "id": 4666,
                                "name": "Identifier",
                                "src": "5674:5:11"
                              }
                            ],
                            "id": 4667,
                            "name": "FunctionCall",
                            "src": "5645:35:11"
                          }
                        ],
                        "id": 4668,
                        "name": "FunctionCall",
                        "src": "5637:44:11"
                      }
                    ],
                    "id": 4669,
                    "name": "ExpressionStatement",
                    "src": "5637:44:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4920,
                              "type": "function (address,address,bytes32,bytes32)",
                              "value": "_setPermission"
                            },
                            "id": 4670,
                            "name": "Identifier",
                            "src": "5692:14:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4651,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 4671,
                            "name": "Identifier",
                            "src": "5707:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4653,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4672,
                            "name": "Identifier",
                            "src": "5716:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4655,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4673,
                            "name": "Identifier",
                            "src": "5722:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes32)",
                                  "value": "bytes32"
                                },
                                "id": 4674,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5729:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4675,
                                "name": "Literal",
                                "src": "5737:1:11"
                              }
                            ],
                            "id": 4676,
                            "name": "FunctionCall",
                            "src": "5729:10:11"
                          }
                        ],
                        "id": 4677,
                        "name": "FunctionCall",
                        "src": "5692:48:11"
                      }
                    ],
                    "id": 4678,
                    "name": "ExpressionStatement",
                    "src": "5692:48:11"
                  }
                ],
                "id": 4679,
                "name": "Block",
                "src": "5627:120:11"
              }
            ],
            "id": 4680,
            "name": "FunctionDefinition",
            "src": "5491:256:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "setPermissionManager",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "external"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newManager",
                      "scope": 4700,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4681,
                        "name": "ElementaryTypeName",
                        "src": "6101:7:11"
                      }
                    ],
                    "id": 4682,
                    "name": "VariableDeclaration",
                    "src": "6101:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4700,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4683,
                        "name": "ElementaryTypeName",
                        "src": "6122:7:11"
                      }
                    ],
                    "id": 4684,
                    "name": "VariableDeclaration",
                    "src": "6122:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4700,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4685,
                        "name": "ElementaryTypeName",
                        "src": "6136:7:11"
                      }
                    ],
                    "id": 4686,
                    "name": "VariableDeclaration",
                    "src": "6136:13:11"
                  }
                ],
                "id": 4687,
                "name": "ParameterList",
                "src": "6100:50:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4692,
                "name": "ParameterList",
                "src": "6215:0:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4508,
                      "type": "modifier (address,bytes32)",
                      "value": "onlyPermissionManager"
                    },
                    "id": 4688,
                    "name": "Identifier",
                    "src": "6159:21:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4684,
                      "type": "address",
                      "value": "_app"
                    },
                    "id": 4689,
                    "name": "Identifier",
                    "src": "6181:4:11"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 4686,
                      "type": "bytes32",
                      "value": "_role"
                    },
                    "id": 4690,
                    "name": "Identifier",
                    "src": "6187:5:11"
                  }
                ],
                "id": 4691,
                "name": "ModifierInvocation",
                "src": "6159:34:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5450,
                              "type": "function (address,address,bytes32)",
                              "value": "_setPermissionManager"
                            },
                            "id": 4693,
                            "name": "Identifier",
                            "src": "6225:21:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4682,
                              "type": "address",
                              "value": "_newManager"
                            },
                            "id": 4694,
                            "name": "Identifier",
                            "src": "6247:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4684,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4695,
                            "name": "Identifier",
                            "src": "6260:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4686,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4696,
                            "name": "Identifier",
                            "src": "6266:5:11"
                          }
                        ],
                        "id": 4697,
                        "name": "FunctionCall",
                        "src": "6225:47:11"
                      }
                    ],
                    "id": 4698,
                    "name": "ExpressionStatement",
                    "src": "6225:47:11"
                  }
                ],
                "id": 4699,
                "name": "Block",
                "src": "6215:64:11"
              }
            ],
            "id": 4700,
            "name": "FunctionDefinition",
            "src": "6071:208:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getPermissionManager",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4717,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4701,
                        "name": "ElementaryTypeName",
                        "src": "6521:7:11"
                      }
                    ],
                    "id": 4702,
                    "name": "VariableDeclaration",
                    "src": "6521:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4717,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4703,
                        "name": "ElementaryTypeName",
                        "src": "6535:7:11"
                      }
                    ],
                    "id": 4704,
                    "name": "VariableDeclaration",
                    "src": "6535:13:11"
                  }
                ],
                "id": 4705,
                "name": "ParameterList",
                "src": "6520:29:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4717,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4706,
                        "name": "ElementaryTypeName",
                        "src": "6571:7:11"
                      }
                    ],
                    "id": 4707,
                    "name": "VariableDeclaration",
                    "src": "6571:7:11"
                  }
                ],
                "id": 4708,
                "name": "ParameterList",
                "src": "6570:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 4708
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4438,
                              "type": "mapping(bytes32 => address)",
                              "value": "permissionManager"
                            },
                            "id": 4709,
                            "name": "Identifier",
                            "src": "6597:17:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5468,
                                  "type": "function (address,bytes32) pure returns (bytes32)",
                                  "value": "roleHash"
                                },
                                "id": 4710,
                                "name": "Identifier",
                                "src": "6615:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4702,
                                  "type": "address",
                                  "value": "_app"
                                },
                                "id": 4711,
                                "name": "Identifier",
                                "src": "6624:4:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4704,
                                  "type": "bytes32",
                                  "value": "_role"
                                },
                                "id": 4712,
                                "name": "Identifier",
                                "src": "6630:5:11"
                              }
                            ],
                            "id": 4713,
                            "name": "FunctionCall",
                            "src": "6615:21:11"
                          }
                        ],
                        "id": 4714,
                        "name": "IndexAccess",
                        "src": "6597:40:11"
                      }
                    ],
                    "id": 4715,
                    "name": "Return",
                    "src": "6590:47:11"
                  }
                ],
                "id": 4716,
                "name": "Block",
                "src": "6580:64:11"
              }
            ],
            "id": 4717,
            "name": "FunctionDefinition",
            "src": "6491:153:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "hasPermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": 6000,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_who",
                      "scope": 4751,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4718,
                        "name": "ElementaryTypeName",
                        "src": "7033:7:11"
                      }
                    ],
                    "id": 4719,
                    "name": "VariableDeclaration",
                    "src": "7033:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 4751,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4720,
                        "name": "ElementaryTypeName",
                        "src": "7047:7:11"
                      }
                    ],
                    "id": 4721,
                    "name": "VariableDeclaration",
                    "src": "7047:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 4751,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4722,
                        "name": "ElementaryTypeName",
                        "src": "7063:7:11"
                      }
                    ],
                    "id": 4723,
                    "name": "VariableDeclaration",
                    "src": "7063:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_how",
                      "scope": 4751,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes storage pointer"
                        },
                        "id": 4724,
                        "name": "ElementaryTypeName",
                        "src": "7078:5:11"
                      }
                    ],
                    "id": 4725,
                    "name": "VariableDeclaration",
                    "src": "7078:17:11"
                  }
                ],
                "id": 4726,
                "name": "ParameterList",
                "src": "7032:64:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4751,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4727,
                        "name": "ElementaryTypeName",
                        "src": "7118:4:11"
                      }
                    ],
                    "id": 4728,
                    "name": "VariableDeclaration",
                    "src": "7118:4:11"
                  }
                ],
                "id": 4729,
                "name": "ParameterList",
                "src": "7117:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        null
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "how",
                          "scope": 4751,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "uint256[] memory",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "length": null,
                              "type": "uint256[] storage pointer"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint256",
                                  "type": "uint256"
                                },
                                "id": 4731,
                                "name": "ElementaryTypeName",
                                "src": "7134:7:11"
                              }
                            ],
                            "id": 4732,
                            "name": "ArrayTypeName",
                            "src": "7134:9:11"
                          }
                        ],
                        "id": 4733,
                        "name": "VariableDeclaration",
                        "src": "7134:20:11"
                      }
                    ],
                    "id": 4734,
                    "name": "VariableDeclarationStatement",
                    "src": "7134:20:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4736
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "intsLength",
                          "scope": 4751,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4735,
                            "name": "ElementaryTypeName",
                            "src": "7164:7:11"
                          }
                        ],
                        "id": 4736,
                        "name": "VariableDeclaration",
                        "src": "7164:18:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4725,
                                  "type": "bytes memory",
                                  "value": "_how"
                                },
                                "id": 4737,
                                "name": "Identifier",
                                "src": "7185:4:11"
                              }
                            ],
                            "id": 4738,
                            "name": "MemberAccess",
                            "src": "7185:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "3332",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 32",
                              "value": "32"
                            },
                            "id": 4739,
                            "name": "Literal",
                            "src": "7199:2:11"
                          }
                        ],
                        "id": 4740,
                        "name": "BinaryOperation",
                        "src": "7185:16:11"
                      }
                    ],
                    "id": 4741,
                    "name": "VariableDeclarationStatement",
                    "src": "7164:37:11"
                  },
                  {
                    "attributes": {
                      "externalReferences": [
                        {
                          "_how": {
                            "declaration": 4725,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7241:4:11",
                            "valueSize": 1
                          }
                        },
                        {
                          "how": {
                            "declaration": 4733,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7234:3:11",
                            "valueSize": 1
                          }
                        },
                        {
                          "how": {
                            "declaration": 4733,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7283:3:11",
                            "valueSize": 1
                          }
                        },
                        {
                          "intsLength": {
                            "declaration": 4736,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7288:10:11",
                            "valueSize": 1
                          }
                        }
                      ],
                      "operations": "{\n    how := _how\n    mstore(how, intsLength)\n}"
                    },
                    "children": [],
                    "id": 4742,
                    "name": "InlineAssembly",
                    "src": "7211:160:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4729
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                4751,
                                4822,
                                4851
                              ],
                              "referencedDeclaration": 4822,
                              "type": "function (address,address,bytes32,uint256[] memory) view returns (bool)",
                              "value": "hasPermission"
                            },
                            "id": 4743,
                            "name": "Identifier",
                            "src": "7372:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4719,
                              "type": "address",
                              "value": "_who"
                            },
                            "id": 4744,
                            "name": "Identifier",
                            "src": "7386:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4721,
                              "type": "address",
                              "value": "_where"
                            },
                            "id": 4745,
                            "name": "Identifier",
                            "src": "7392:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4723,
                              "type": "bytes32",
                              "value": "_what"
                            },
                            "id": 4746,
                            "name": "Identifier",
                            "src": "7400:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4733,
                              "type": "uint256[] memory",
                              "value": "how"
                            },
                            "id": 4747,
                            "name": "Identifier",
                            "src": "7407:3:11"
                          }
                        ],
                        "id": 4748,
                        "name": "FunctionCall",
                        "src": "7372:39:11"
                      }
                    ],
                    "id": 4749,
                    "name": "Return",
                    "src": "7365:46:11"
                  }
                ],
                "id": 4750,
                "name": "Block",
                "src": "7124:294:11"
              }
            ],
            "id": 4751,
            "name": "FunctionDefinition",
            "src": "7010:408:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "hasPermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_who",
                      "scope": 4822,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4752,
                        "name": "ElementaryTypeName",
                        "src": "7447:7:11"
                      }
                    ],
                    "id": 4753,
                    "name": "VariableDeclaration",
                    "src": "7447:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 4822,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4754,
                        "name": "ElementaryTypeName",
                        "src": "7461:7:11"
                      }
                    ],
                    "id": 4755,
                    "name": "VariableDeclaration",
                    "src": "7461:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 4822,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4756,
                        "name": "ElementaryTypeName",
                        "src": "7477:7:11"
                      }
                    ],
                    "id": 4757,
                    "name": "VariableDeclaration",
                    "src": "7477:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_how",
                      "scope": 4822,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "uint256[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4758,
                            "name": "ElementaryTypeName",
                            "src": "7492:7:11"
                          }
                        ],
                        "id": 4759,
                        "name": "ArrayTypeName",
                        "src": "7492:9:11"
                      }
                    ],
                    "id": 4760,
                    "name": "VariableDeclaration",
                    "src": "7492:21:11"
                  }
                ],
                "id": 4761,
                "name": "ParameterList",
                "src": "7446:68:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4822,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4762,
                        "name": "ElementaryTypeName",
                        "src": "7536:4:11"
                      }
                    ],
                    "id": 4763,
                    "name": "VariableDeclaration",
                    "src": "7536:4:11"
                  }
                ],
                "id": 4764,
                "name": "ParameterList",
                "src": "7535:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4766
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "whoParams",
                          "scope": 4822,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 4765,
                            "name": "ElementaryTypeName",
                            "src": "7552:7:11"
                          }
                        ],
                        "id": 4766,
                        "name": "VariableDeclaration",
                        "src": "7552:17:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4429,
                              "type": "mapping(bytes32 => bytes32)",
                              "value": "permissions"
                            },
                            "id": 4767,
                            "name": "Identifier",
                            "src": "7572:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5489,
                                  "type": "function (address,address,bytes32) pure returns (bytes32)",
                                  "value": "permissionHash"
                                },
                                "id": 4768,
                                "name": "Identifier",
                                "src": "7584:14:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4753,
                                  "type": "address",
                                  "value": "_who"
                                },
                                "id": 4769,
                                "name": "Identifier",
                                "src": "7599:4:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4755,
                                  "type": "address",
                                  "value": "_where"
                                },
                                "id": 4770,
                                "name": "Identifier",
                                "src": "7605:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4757,
                                  "type": "bytes32",
                                  "value": "_what"
                                },
                                "id": 4771,
                                "name": "Identifier",
                                "src": "7613:5:11"
                              }
                            ],
                            "id": 4772,
                            "name": "FunctionCall",
                            "src": "7584:35:11"
                          }
                        ],
                        "id": 4773,
                        "name": "IndexAccess",
                        "src": "7572:48:11"
                      }
                    ],
                    "id": 4774,
                    "name": "VariableDeclarationStatement",
                    "src": "7552:68:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4766,
                                  "type": "bytes32",
                                  "value": "whoParams"
                                },
                                "id": 4775,
                                "name": "Identifier",
                                "src": "7634:9:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes32)",
                                      "value": "bytes32"
                                    },
                                    "id": 4776,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "7647:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4777,
                                    "name": "Literal",
                                    "src": "7655:1:11"
                                  }
                                ],
                                "id": 4778,
                                "name": "FunctionCall",
                                "src": "7647:10:11"
                              }
                            ],
                            "id": 4779,
                            "name": "BinaryOperation",
                            "src": "7634:23:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5023,
                                  "type": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)",
                                  "value": "evalParams"
                                },
                                "id": 4780,
                                "name": "Identifier",
                                "src": "7661:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4766,
                                  "type": "bytes32",
                                  "value": "whoParams"
                                },
                                "id": 4781,
                                "name": "Identifier",
                                "src": "7672:9:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4753,
                                  "type": "address",
                                  "value": "_who"
                                },
                                "id": 4782,
                                "name": "Identifier",
                                "src": "7683:4:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4755,
                                  "type": "address",
                                  "value": "_where"
                                },
                                "id": 4783,
                                "name": "Identifier",
                                "src": "7689:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4757,
                                  "type": "bytes32",
                                  "value": "_what"
                                },
                                "id": 4784,
                                "name": "Identifier",
                                "src": "7697:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4760,
                                  "type": "uint256[] memory",
                                  "value": "_how"
                                },
                                "id": 4785,
                                "name": "Identifier",
                                "src": "7704:4:11"
                              }
                            ],
                            "id": 4786,
                            "name": "FunctionCall",
                            "src": "7661:48:11"
                          }
                        ],
                        "id": 4787,
                        "name": "BinaryOperation",
                        "src": "7634:75:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4764
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 4788,
                                "name": "Literal",
                                "src": "7732:4:11"
                              }
                            ],
                            "id": 4789,
                            "name": "Return",
                            "src": "7725:11:11"
                          }
                        ],
                        "id": 4790,
                        "name": "Block",
                        "src": "7711:36:11"
                      }
                    ],
                    "id": 4791,
                    "name": "IfStatement",
                    "src": "7630:117:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4793
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "anyParams",
                          "scope": 4822,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 4792,
                            "name": "ElementaryTypeName",
                            "src": "7757:7:11"
                          }
                        ],
                        "id": 4793,
                        "name": "VariableDeclaration",
                        "src": "7757:17:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4429,
                              "type": "mapping(bytes32 => bytes32)",
                              "value": "permissions"
                            },
                            "id": 4794,
                            "name": "Identifier",
                            "src": "7777:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes32",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5489,
                                  "type": "function (address,address,bytes32) pure returns (bytes32)",
                                  "value": "permissionHash"
                                },
                                "id": 4795,
                                "name": "Identifier",
                                "src": "7789:14:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4490,
                                  "type": "address",
                                  "value": "ANY_ENTITY"
                                },
                                "id": 4796,
                                "name": "Identifier",
                                "src": "7804:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4755,
                                  "type": "address",
                                  "value": "_where"
                                },
                                "id": 4797,
                                "name": "Identifier",
                                "src": "7816:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4757,
                                  "type": "bytes32",
                                  "value": "_what"
                                },
                                "id": 4798,
                                "name": "Identifier",
                                "src": "7824:5:11"
                              }
                            ],
                            "id": 4799,
                            "name": "FunctionCall",
                            "src": "7789:41:11"
                          }
                        ],
                        "id": 4800,
                        "name": "IndexAccess",
                        "src": "7777:54:11"
                      }
                    ],
                    "id": 4801,
                    "name": "VariableDeclarationStatement",
                    "src": "7757:74:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4793,
                                  "type": "bytes32",
                                  "value": "anyParams"
                                },
                                "id": 4802,
                                "name": "Identifier",
                                "src": "7845:9:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes32)",
                                      "value": "bytes32"
                                    },
                                    "id": 4803,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "7858:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4804,
                                    "name": "Literal",
                                    "src": "7866:1:11"
                                  }
                                ],
                                "id": 4805,
                                "name": "FunctionCall",
                                "src": "7858:10:11"
                              }
                            ],
                            "id": 4806,
                            "name": "BinaryOperation",
                            "src": "7845:23:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5023,
                                  "type": "function (bytes32,address,address,bytes32,uint256[] memory) view returns (bool)",
                                  "value": "evalParams"
                                },
                                "id": 4807,
                                "name": "Identifier",
                                "src": "7872:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4793,
                                  "type": "bytes32",
                                  "value": "anyParams"
                                },
                                "id": 4808,
                                "name": "Identifier",
                                "src": "7883:9:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4490,
                                  "type": "address",
                                  "value": "ANY_ENTITY"
                                },
                                "id": 4809,
                                "name": "Identifier",
                                "src": "7894:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4755,
                                  "type": "address",
                                  "value": "_where"
                                },
                                "id": 4810,
                                "name": "Identifier",
                                "src": "7906:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4757,
                                  "type": "bytes32",
                                  "value": "_what"
                                },
                                "id": 4811,
                                "name": "Identifier",
                                "src": "7914:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4760,
                                  "type": "uint256[] memory",
                                  "value": "_how"
                                },
                                "id": 4812,
                                "name": "Identifier",
                                "src": "7921:4:11"
                              }
                            ],
                            "id": 4813,
                            "name": "FunctionCall",
                            "src": "7872:54:11"
                          }
                        ],
                        "id": 4814,
                        "name": "BinaryOperation",
                        "src": "7845:81:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4764
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 4815,
                                "name": "Literal",
                                "src": "7949:4:11"
                              }
                            ],
                            "id": 4816,
                            "name": "Return",
                            "src": "7942:11:11"
                          }
                        ],
                        "id": 4817,
                        "name": "Block",
                        "src": "7928:36:11"
                      }
                    ],
                    "id": 4818,
                    "name": "IfStatement",
                    "src": "7841:123:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4764
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "66616c7365",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "false"
                        },
                        "id": 4819,
                        "name": "Literal",
                        "src": "7981:5:11"
                      }
                    ],
                    "id": 4820,
                    "name": "Return",
                    "src": "7974:12:11"
                  }
                ],
                "id": 4821,
                "name": "Block",
                "src": "7542:451:11"
              }
            ],
            "id": 4822,
            "name": "FunctionDefinition",
            "src": "7424:569:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "hasPermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_who",
                      "scope": 4851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4823,
                        "name": "ElementaryTypeName",
                        "src": "8022:7:11"
                      }
                    ],
                    "id": 4824,
                    "name": "VariableDeclaration",
                    "src": "8022:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 4851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4825,
                        "name": "ElementaryTypeName",
                        "src": "8036:7:11"
                      }
                    ],
                    "id": 4826,
                    "name": "VariableDeclaration",
                    "src": "8036:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 4851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4827,
                        "name": "ElementaryTypeName",
                        "src": "8052:7:11"
                      }
                    ],
                    "id": 4828,
                    "name": "VariableDeclaration",
                    "src": "8052:13:11"
                  }
                ],
                "id": 4829,
                "name": "ParameterList",
                "src": "8021:45:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4851,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4830,
                        "name": "ElementaryTypeName",
                        "src": "8088:4:11"
                      }
                    ],
                    "id": 4831,
                    "name": "VariableDeclaration",
                    "src": "8088:4:11"
                  }
                ],
                "id": 4832,
                "name": "ParameterList",
                "src": "8087:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4836
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "empty",
                          "scope": 4851,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "uint256[] memory",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "length": null,
                              "type": "uint256[] storage pointer"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "uint256",
                                  "type": "uint256"
                                },
                                "id": 4834,
                                "name": "ElementaryTypeName",
                                "src": "8104:7:11"
                              }
                            ],
                            "id": 4835,
                            "name": "ArrayTypeName",
                            "src": "8104:9:11"
                          }
                        ],
                        "id": 4836,
                        "name": "VariableDeclaration",
                        "src": "8104:22:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256[] memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "length": null,
                                  "type": "uint256[] storage pointer"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint256",
                                      "type": "uint256"
                                    },
                                    "id": 4837,
                                    "name": "ElementaryTypeName",
                                    "src": "8133:7:11"
                                  }
                                ],
                                "id": 4838,
                                "name": "ArrayTypeName",
                                "src": "8133:9:11"
                              }
                            ],
                            "id": 4839,
                            "name": "NewExpression",
                            "src": "8129:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4840,
                            "name": "Literal",
                            "src": "8143:1:11"
                          }
                        ],
                        "id": 4841,
                        "name": "FunctionCall",
                        "src": "8129:16:11"
                      }
                    ],
                    "id": 4842,
                    "name": "VariableDeclarationStatement",
                    "src": "8104:41:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4832
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                4751,
                                4822,
                                4851
                              ],
                              "referencedDeclaration": 4822,
                              "type": "function (address,address,bytes32,uint256[] memory) view returns (bool)",
                              "value": "hasPermission"
                            },
                            "id": 4843,
                            "name": "Identifier",
                            "src": "8162:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4824,
                              "type": "address",
                              "value": "_who"
                            },
                            "id": 4844,
                            "name": "Identifier",
                            "src": "8176:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4826,
                              "type": "address",
                              "value": "_where"
                            },
                            "id": 4845,
                            "name": "Identifier",
                            "src": "8182:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4828,
                              "type": "bytes32",
                              "value": "_what"
                            },
                            "id": 4846,
                            "name": "Identifier",
                            "src": "8190:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4836,
                              "type": "uint256[] memory",
                              "value": "empty"
                            },
                            "id": 4847,
                            "name": "Identifier",
                            "src": "8197:5:11"
                          }
                        ],
                        "id": 4848,
                        "name": "FunctionCall",
                        "src": "8162:41:11"
                      }
                    ],
                    "id": 4849,
                    "name": "Return",
                    "src": "8155:48:11"
                  }
                ],
                "id": 4850,
                "name": "Block",
                "src": "8094:116:11"
              }
            ],
            "id": 4851,
            "name": "FunctionDefinition",
            "src": "7999:211:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_createPermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_entity",
                      "scope": 4887,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4852,
                        "name": "ElementaryTypeName",
                        "src": "8343:7:11"
                      }
                    ],
                    "id": 4853,
                    "name": "VariableDeclaration",
                    "src": "8343:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4887,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4854,
                        "name": "ElementaryTypeName",
                        "src": "8360:7:11"
                      }
                    ],
                    "id": 4855,
                    "name": "VariableDeclaration",
                    "src": "8360:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4887,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4856,
                        "name": "ElementaryTypeName",
                        "src": "8374:7:11"
                      }
                    ],
                    "id": 4857,
                    "name": "VariableDeclaration",
                    "src": "8374:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_manager",
                      "scope": 4887,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4858,
                        "name": "ElementaryTypeName",
                        "src": "8389:7:11"
                      }
                    ],
                    "id": 4859,
                    "name": "VariableDeclaration",
                    "src": "8389:16:11"
                  }
                ],
                "id": 4860,
                "name": "ParameterList",
                "src": "8342:64:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4861,
                "name": "ParameterList",
                "src": "8416:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12593,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 4862,
                            "name": "Identifier",
                            "src": "8510:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4717,
                                      "type": "function (address,bytes32) view returns (address)",
                                      "value": "getPermissionManager"
                                    },
                                    "id": 4863,
                                    "name": "Identifier",
                                    "src": "8518:20:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4855,
                                      "type": "address",
                                      "value": "_app"
                                    },
                                    "id": 4864,
                                    "name": "Identifier",
                                    "src": "8539:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4857,
                                      "type": "bytes32",
                                      "value": "_role"
                                    },
                                    "id": 4865,
                                    "name": "Identifier",
                                    "src": "8545:5:11"
                                  }
                                ],
                                "id": 4866,
                                "name": "FunctionCall",
                                "src": "8518:33:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 4867,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "8555:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4868,
                                    "name": "Literal",
                                    "src": "8563:1:11"
                                  }
                                ],
                                "id": 4869,
                                "name": "FunctionCall",
                                "src": "8555:10:11"
                              }
                            ],
                            "id": 4870,
                            "name": "BinaryOperation",
                            "src": "8518:47:11"
                          }
                        ],
                        "id": 4871,
                        "name": "FunctionCall",
                        "src": "8510:56:11"
                      }
                    ],
                    "id": 4872,
                    "name": "ExpressionStatement",
                    "src": "8510:56:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4920,
                              "type": "function (address,address,bytes32,bytes32)",
                              "value": "_setPermission"
                            },
                            "id": 4873,
                            "name": "Identifier",
                            "src": "8577:14:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4853,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 4874,
                            "name": "Identifier",
                            "src": "8592:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4855,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4875,
                            "name": "Identifier",
                            "src": "8601:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4857,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4876,
                            "name": "Identifier",
                            "src": "8607:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4484,
                              "type": "bytes32",
                              "value": "EMPTY_PARAM_HASH"
                            },
                            "id": 4877,
                            "name": "Identifier",
                            "src": "8614:16:11"
                          }
                        ],
                        "id": 4878,
                        "name": "FunctionCall",
                        "src": "8577:54:11"
                      }
                    ],
                    "id": 4879,
                    "name": "ExpressionStatement",
                    "src": "8577:54:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5450,
                              "type": "function (address,address,bytes32)",
                              "value": "_setPermissionManager"
                            },
                            "id": 4880,
                            "name": "Identifier",
                            "src": "8641:21:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4859,
                              "type": "address",
                              "value": "_manager"
                            },
                            "id": 4881,
                            "name": "Identifier",
                            "src": "8663:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4855,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4882,
                            "name": "Identifier",
                            "src": "8673:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4857,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4883,
                            "name": "Identifier",
                            "src": "8679:5:11"
                          }
                        ],
                        "id": 4884,
                        "name": "FunctionCall",
                        "src": "8641:44:11"
                      }
                    ],
                    "id": 4885,
                    "name": "ExpressionStatement",
                    "src": "8641:44:11"
                  }
                ],
                "id": 4886,
                "name": "Block",
                "src": "8416:276:11"
              }
            ],
            "id": 4887,
            "name": "FunctionDefinition",
            "src": "8316:376:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_setPermission",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_entity",
                      "scope": 4920,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4888,
                        "name": "ElementaryTypeName",
                        "src": "8805:7:11"
                      }
                    ],
                    "id": 4889,
                    "name": "VariableDeclaration",
                    "src": "8805:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 4920,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4890,
                        "name": "ElementaryTypeName",
                        "src": "8822:7:11"
                      }
                    ],
                    "id": 4891,
                    "name": "VariableDeclaration",
                    "src": "8822:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 4920,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4892,
                        "name": "ElementaryTypeName",
                        "src": "8836:7:11"
                      }
                    ],
                    "id": 4893,
                    "name": "VariableDeclaration",
                    "src": "8836:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paramsHash",
                      "scope": 4920,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4894,
                        "name": "ElementaryTypeName",
                        "src": "8851:7:11"
                      }
                    ],
                    "id": 4895,
                    "name": "VariableDeclaration",
                    "src": "8851:19:11"
                  }
                ],
                "id": 4896,
                "name": "ParameterList",
                "src": "8804:67:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 4897,
                "name": "ParameterList",
                "src": "8881:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4429,
                                  "type": "mapping(bytes32 => bytes32)",
                                  "value": "permissions"
                                },
                                "id": 4898,
                                "name": "Identifier",
                                "src": "8891:11:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5489,
                                      "type": "function (address,address,bytes32) pure returns (bytes32)",
                                      "value": "permissionHash"
                                    },
                                    "id": 4899,
                                    "name": "Identifier",
                                    "src": "8903:14:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4889,
                                      "type": "address",
                                      "value": "_entity"
                                    },
                                    "id": 4900,
                                    "name": "Identifier",
                                    "src": "8918:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4891,
                                      "type": "address",
                                      "value": "_app"
                                    },
                                    "id": 4901,
                                    "name": "Identifier",
                                    "src": "8927:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4893,
                                      "type": "bytes32",
                                      "value": "_role"
                                    },
                                    "id": 4902,
                                    "name": "Identifier",
                                    "src": "8933:5:11"
                                  }
                                ],
                                "id": 4903,
                                "name": "FunctionCall",
                                "src": "8903:36:11"
                              }
                            ],
                            "id": 4904,
                            "name": "IndexAccess",
                            "src": "8891:49:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4895,
                              "type": "bytes32",
                              "value": "_paramsHash"
                            },
                            "id": 4905,
                            "name": "Identifier",
                            "src": "8943:11:11"
                          }
                        ],
                        "id": 4906,
                        "name": "Assignment",
                        "src": "8891:63:11"
                      }
                    ],
                    "id": 4907,
                    "name": "ExpressionStatement",
                    "src": "8891:63:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4518,
                              "type": "function (address,address,bytes32,bool)",
                              "value": "SetPermission"
                            },
                            "id": 4908,
                            "name": "Identifier",
                            "src": "8965:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4889,
                              "type": "address",
                              "value": "_entity"
                            },
                            "id": 4909,
                            "name": "Identifier",
                            "src": "8979:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4891,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 4910,
                            "name": "Identifier",
                            "src": "8988:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4893,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 4911,
                            "name": "Identifier",
                            "src": "8994:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4895,
                                  "type": "bytes32",
                                  "value": "_paramsHash"
                                },
                                "id": 4912,
                                "name": "Identifier",
                                "src": "9001:11:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes32)",
                                      "value": "bytes32"
                                    },
                                    "id": 4913,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "9016:7:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4914,
                                    "name": "Literal",
                                    "src": "9024:1:11"
                                  }
                                ],
                                "id": 4915,
                                "name": "FunctionCall",
                                "src": "9016:10:11"
                              }
                            ],
                            "id": 4916,
                            "name": "BinaryOperation",
                            "src": "9001:25:11"
                          }
                        ],
                        "id": 4917,
                        "name": "FunctionCall",
                        "src": "8965:62:11"
                      }
                    ],
                    "id": 4918,
                    "name": "ExpressionStatement",
                    "src": "8965:62:11"
                  }
                ],
                "id": 4919,
                "name": "Block",
                "src": "8881:153:11"
              }
            ],
            "id": 4920,
            "name": "FunctionDefinition",
            "src": "8781:253:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_saveParams",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_encodedParams",
                      "scope": 4990,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4921,
                            "name": "ElementaryTypeName",
                            "src": "9061:7:11"
                          }
                        ],
                        "id": 4922,
                        "name": "ArrayTypeName",
                        "src": "9061:9:11"
                      }
                    ],
                    "id": 4923,
                    "name": "VariableDeclaration",
                    "src": "9061:24:11"
                  }
                ],
                "id": 4924,
                "name": "ParameterList",
                "src": "9060:26:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4990,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4925,
                        "name": "ElementaryTypeName",
                        "src": "9105:7:11"
                      }
                    ],
                    "id": 4926,
                    "name": "VariableDeclaration",
                    "src": "9105:7:11"
                  }
                ],
                "id": 4927,
                "name": "ParameterList",
                "src": "9104:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        4929
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "paramHash",
                          "scope": 4990,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes32",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 4928,
                            "name": "ElementaryTypeName",
                            "src": "9124:7:11"
                          }
                        ],
                        "id": 4929,
                        "name": "VariableDeclaration",
                        "src": "9124:17:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12584,
                              "type": "function () pure returns (bytes32)",
                              "value": "keccak256"
                            },
                            "id": 4930,
                            "name": "Identifier",
                            "src": "9144:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4923,
                              "type": "uint256[] memory",
                              "value": "_encodedParams"
                            },
                            "id": 4931,
                            "name": "Identifier",
                            "src": "9154:14:11"
                          }
                        ],
                        "id": 4932,
                        "name": "FunctionCall",
                        "src": "9144:25:11"
                      }
                    ],
                    "id": 4933,
                    "name": "VariableDeclarationStatement",
                    "src": "9124:45:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4937
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "params",
                          "scope": 4990,
                          "stateVariable": false,
                          "storageLocation": "storage",
                          "type": "struct ACL.Param storage ref[] storage pointer",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "length": null,
                              "type": "struct ACL.Param storage ref[] storage pointer"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "contractScope": null,
                                  "name": "Param",
                                  "referencedDeclaration": 4459,
                                  "type": "struct ACL.Param storage pointer"
                                },
                                "id": 4935,
                                "name": "UserDefinedTypeName",
                                "src": "9179:5:11"
                              }
                            ],
                            "id": 4936,
                            "name": "ArrayTypeName",
                            "src": "9179:7:11"
                          }
                        ],
                        "id": 4937,
                        "name": "VariableDeclaration",
                        "src": "9179:22:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct ACL.Param storage ref[] storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4434,
                              "type": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)",
                              "value": "permissionParams"
                            },
                            "id": 4938,
                            "name": "Identifier",
                            "src": "9204:16:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4929,
                              "type": "bytes32",
                              "value": "paramHash"
                            },
                            "id": 4939,
                            "name": "Identifier",
                            "src": "9221:9:11"
                          }
                        ],
                        "id": 4940,
                        "name": "IndexAccess",
                        "src": "9204:27:11"
                      }
                    ],
                    "id": 4941,
                    "name": "VariableDeclarationStatement",
                    "src": "9179:52:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4937,
                                  "type": "struct ACL.Param storage ref[] storage pointer",
                                  "value": "params"
                                },
                                "id": 4942,
                                "name": "Identifier",
                                "src": "9246:6:11"
                              }
                            ],
                            "id": 4943,
                            "name": "MemberAccess",
                            "src": "9246:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4944,
                            "name": "Literal",
                            "src": "9263:1:11"
                          }
                        ],
                        "id": 4945,
                        "name": "BinaryOperation",
                        "src": "9246:18:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "assignments": [
                                    4947
                                  ]
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "constant": false,
                                      "name": "i",
                                      "scope": 4990,
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "type": "uint256",
                                      "value": null,
                                      "visibility": "internal"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "uint256",
                                          "type": "uint256"
                                        },
                                        "id": 4946,
                                        "name": "ElementaryTypeName",
                                        "src": "9312:7:11"
                                      }
                                    ],
                                    "id": 4947,
                                    "name": "VariableDeclaration",
                                    "src": "9312:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4948,
                                    "name": "Literal",
                                    "src": "9324:1:11"
                                  }
                                ],
                                "id": 4949,
                                "name": "VariableDeclarationStatement",
                                "src": "9312:13:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "<",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4947,
                                      "type": "uint256",
                                      "value": "i"
                                    },
                                    "id": 4950,
                                    "name": "Identifier",
                                    "src": "9327:1:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4923,
                                          "type": "uint256[] memory",
                                          "value": "_encodedParams"
                                        },
                                        "id": 4951,
                                        "name": "Identifier",
                                        "src": "9331:14:11"
                                      }
                                    ],
                                    "id": 4952,
                                    "name": "MemberAccess",
                                    "src": "9331:21:11"
                                  }
                                ],
                                "id": 4953,
                                "name": "BinaryOperation",
                                "src": "9327:25:11"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "++",
                                      "prefix": false,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4947,
                                          "type": "uint256",
                                          "value": "i"
                                        },
                                        "id": 4954,
                                        "name": "Identifier",
                                        "src": "9354:1:11"
                                      }
                                    ],
                                    "id": 4955,
                                    "name": "UnaryOperation",
                                    "src": "9354:3:11"
                                  }
                                ],
                                "id": 4956,
                                "name": "ExpressionStatement",
                                "src": "9354:3:11"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        4958
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "name": "encodedParam",
                                          "scope": 4990,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint256",
                                              "type": "uint256"
                                            },
                                            "id": 4957,
                                            "name": "ElementaryTypeName",
                                            "src": "9377:7:11"
                                          }
                                        ],
                                        "id": 4958,
                                        "name": "VariableDeclaration",
                                        "src": "9377:20:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4923,
                                              "type": "uint256[] memory",
                                              "value": "_encodedParams"
                                            },
                                            "id": 4959,
                                            "name": "Identifier",
                                            "src": "9400:14:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4947,
                                              "type": "uint256",
                                              "value": "i"
                                            },
                                            "id": 4960,
                                            "name": "Identifier",
                                            "src": "9415:1:11"
                                          }
                                        ],
                                        "id": 4961,
                                        "name": "IndexAccess",
                                        "src": "9400:17:11"
                                      }
                                    ],
                                    "id": 4962,
                                    "name": "VariableDeclarationStatement",
                                    "src": "9377:40:11"
                                  },
                                  {
                                    "attributes": {
                                      "assignments": [
                                        4964
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "name": "param",
                                          "scope": 4990,
                                          "stateVariable": false,
                                          "storageLocation": "memory",
                                          "type": "struct ACL.Param memory",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "contractScope": null,
                                              "name": "Param",
                                              "referencedDeclaration": 4459,
                                              "type": "struct ACL.Param storage pointer"
                                            },
                                            "id": 4963,
                                            "name": "UserDefinedTypeName",
                                            "src": "9435:5:11"
                                          }
                                        ],
                                        "id": 4964,
                                        "name": "VariableDeclaration",
                                        "src": "9435:18:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": true,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "struct ACL.Param memory",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint240",
                                                  "typeString": "uint240"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4459,
                                              "type": "type(struct ACL.Param storage pointer)",
                                              "value": "Param"
                                            },
                                            "id": 4965,
                                            "name": "Identifier",
                                            "src": "9456:5:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "uint8",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5939,
                                                  "type": "function (uint256) pure returns (uint8)",
                                                  "value": "decodeParamId"
                                                },
                                                "id": 4966,
                                                "name": "Identifier",
                                                "src": "9462:13:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4958,
                                                  "type": "uint256",
                                                  "value": "encodedParam"
                                                },
                                                "id": 4967,
                                                "name": "Identifier",
                                                "src": "9476:12:11"
                                              }
                                            ],
                                            "id": 4968,
                                            "name": "FunctionCall",
                                            "src": "9462:27:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "uint8",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5922,
                                                  "type": "function (uint256) pure returns (uint8)",
                                                  "value": "decodeParamOp"
                                                },
                                                "id": 4969,
                                                "name": "Identifier",
                                                "src": "9491:13:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4958,
                                                  "type": "uint256",
                                                  "value": "encodedParam"
                                                },
                                                "id": 4970,
                                                "name": "Identifier",
                                                "src": "9505:12:11"
                                              }
                                            ],
                                            "id": 4971,
                                            "name": "FunctionCall",
                                            "src": "9491:27:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "uint240",
                                              "type_conversion": true
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "type": "type(uint240)",
                                                  "value": "uint240"
                                                },
                                                "id": 4972,
                                                "name": "ElementaryTypeNameExpression",
                                                "src": "9520:7:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4958,
                                                  "type": "uint256",
                                                  "value": "encodedParam"
                                                },
                                                "id": 4973,
                                                "name": "Identifier",
                                                "src": "9528:12:11"
                                              }
                                            ],
                                            "id": 4974,
                                            "name": "FunctionCall",
                                            "src": "9520:21:11"
                                          }
                                        ],
                                        "id": 4975,
                                        "name": "FunctionCall",
                                        "src": "9456:86:11"
                                      }
                                    ],
                                    "id": 4976,
                                    "name": "VariableDeclarationStatement",
                                    "src": "9435:107:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_struct$_Param_$4459_memory_ptr",
                                                  "typeString": "struct ACL.Param memory"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "push",
                                              "referencedDeclaration": null,
                                              "type": "function (struct ACL.Param storage ref) returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4937,
                                                  "type": "struct ACL.Param storage ref[] storage pointer",
                                                  "value": "params"
                                                },
                                                "id": 4977,
                                                "name": "Identifier",
                                                "src": "9560:6:11"
                                              }
                                            ],
                                            "id": 4979,
                                            "name": "MemberAccess",
                                            "src": "9560:11:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4964,
                                              "type": "struct ACL.Param memory",
                                              "value": "param"
                                            },
                                            "id": 4980,
                                            "name": "Identifier",
                                            "src": "9572:5:11"
                                          }
                                        ],
                                        "id": 4981,
                                        "name": "FunctionCall",
                                        "src": "9560:18:11"
                                      }
                                    ],
                                    "id": 4982,
                                    "name": "ExpressionStatement",
                                    "src": "9560:18:11"
                                  }
                                ],
                                "id": 4983,
                                "name": "Block",
                                "src": "9359:234:11"
                              }
                            ],
                            "id": 4984,
                            "name": "ForStatement",
                            "src": "9307:286:11"
                          }
                        ],
                        "id": 4985,
                        "name": "Block",
                        "src": "9266:337:11"
                      }
                    ],
                    "id": 4986,
                    "name": "IfStatement",
                    "src": "9242:361:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4927
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 4929,
                          "type": "bytes32",
                          "value": "paramHash"
                        },
                        "id": 4987,
                        "name": "Identifier",
                        "src": "9620:9:11"
                      }
                    ],
                    "id": 4988,
                    "name": "Return",
                    "src": "9613:16:11"
                  }
                ],
                "id": 4989,
                "name": "Block",
                "src": "9114:522:11"
              }
            ],
            "id": 4990,
            "name": "FunctionDefinition",
            "src": "9040:596:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "evalParams",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paramsHash",
                      "scope": 5023,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4991,
                        "name": "ElementaryTypeName",
                        "src": "9671:7:11"
                      }
                    ],
                    "id": 4992,
                    "name": "VariableDeclaration",
                    "src": "9671:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_who",
                      "scope": 5023,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4993,
                        "name": "ElementaryTypeName",
                        "src": "9700:7:11"
                      }
                    ],
                    "id": 4994,
                    "name": "VariableDeclaration",
                    "src": "9700:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 5023,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4995,
                        "name": "ElementaryTypeName",
                        "src": "9722:7:11"
                      }
                    ],
                    "id": 4996,
                    "name": "VariableDeclaration",
                    "src": "9722:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 5023,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 4997,
                        "name": "ElementaryTypeName",
                        "src": "9746:7:11"
                      }
                    ],
                    "id": 4998,
                    "name": "VariableDeclaration",
                    "src": "9746:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_how",
                      "scope": 5023,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4999,
                            "name": "ElementaryTypeName",
                            "src": "9769:7:11"
                          }
                        ],
                        "id": 5000,
                        "name": "ArrayTypeName",
                        "src": "9769:9:11"
                      }
                    ],
                    "id": 5001,
                    "name": "VariableDeclaration",
                    "src": "9769:14:11"
                  }
                ],
                "id": 5002,
                "name": "ParameterList",
                "src": "9661:128:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5023,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5003,
                        "name": "ElementaryTypeName",
                        "src": "9813:4:11"
                      }
                    ],
                    "id": 5004,
                    "name": "VariableDeclaration",
                    "src": "9813:4:11"
                  }
                ],
                "id": 5005,
                "name": "ParameterList",
                "src": "9812:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4992,
                              "type": "bytes32",
                              "value": "_paramsHash"
                            },
                            "id": 5006,
                            "name": "Identifier",
                            "src": "9837:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4484,
                              "type": "bytes32",
                              "value": "EMPTY_PARAM_HASH"
                            },
                            "id": 5007,
                            "name": "Identifier",
                            "src": "9852:16:11"
                          }
                        ],
                        "id": 5008,
                        "name": "BinaryOperation",
                        "src": "9837:31:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5005
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 5009,
                                "name": "Literal",
                                "src": "9891:4:11"
                              }
                            ],
                            "id": 5010,
                            "name": "Return",
                            "src": "9884:11:11"
                          }
                        ],
                        "id": 5011,
                        "name": "Block",
                        "src": "9870:36:11"
                      }
                    ],
                    "id": 5012,
                    "name": "IfStatement",
                    "src": "9833:73:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5005
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5203,
                              "type": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)",
                              "value": "evalParam"
                            },
                            "id": 5013,
                            "name": "Identifier",
                            "src": "9923:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4992,
                              "type": "bytes32",
                              "value": "_paramsHash"
                            },
                            "id": 5014,
                            "name": "Identifier",
                            "src": "9933:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 5015,
                            "name": "Literal",
                            "src": "9946:1:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4994,
                              "type": "address",
                              "value": "_who"
                            },
                            "id": 5016,
                            "name": "Identifier",
                            "src": "9949:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4996,
                              "type": "address",
                              "value": "_where"
                            },
                            "id": 5017,
                            "name": "Identifier",
                            "src": "9955:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4998,
                              "type": "bytes32",
                              "value": "_what"
                            },
                            "id": 5018,
                            "name": "Identifier",
                            "src": "9963:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5001,
                              "type": "uint256[] memory",
                              "value": "_how"
                            },
                            "id": 5019,
                            "name": "Identifier",
                            "src": "9970:4:11"
                          }
                        ],
                        "id": 5020,
                        "name": "FunctionCall",
                        "src": "9923:52:11"
                      }
                    ],
                    "id": 5021,
                    "name": "Return",
                    "src": "9916:59:11"
                  }
                ],
                "id": 5022,
                "name": "Block",
                "src": "9823:159:11"
              }
            ],
            "id": 5023,
            "name": "FunctionDefinition",
            "src": "9642:340:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "evalParam",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paramsHash",
                      "scope": 5203,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5024,
                        "name": "ElementaryTypeName",
                        "src": "10016:7:11"
                      }
                    ],
                    "id": 5025,
                    "name": "VariableDeclaration",
                    "src": "10016:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paramId",
                      "scope": 5203,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint32",
                          "type": "uint32"
                        },
                        "id": 5026,
                        "name": "ElementaryTypeName",
                        "src": "10045:6:11"
                      }
                    ],
                    "id": 5027,
                    "name": "VariableDeclaration",
                    "src": "10045:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_who",
                      "scope": 5203,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5028,
                        "name": "ElementaryTypeName",
                        "src": "10070:7:11"
                      }
                    ],
                    "id": 5029,
                    "name": "VariableDeclaration",
                    "src": "10070:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 5203,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5030,
                        "name": "ElementaryTypeName",
                        "src": "10092:7:11"
                      }
                    ],
                    "id": 5031,
                    "name": "VariableDeclaration",
                    "src": "10092:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 5203,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5032,
                        "name": "ElementaryTypeName",
                        "src": "10116:7:11"
                      }
                    ],
                    "id": 5033,
                    "name": "VariableDeclaration",
                    "src": "10116:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_how",
                      "scope": 5203,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5034,
                            "name": "ElementaryTypeName",
                            "src": "10139:7:11"
                          }
                        ],
                        "id": 5035,
                        "name": "ArrayTypeName",
                        "src": "10139:9:11"
                      }
                    ],
                    "id": 5036,
                    "name": "VariableDeclaration",
                    "src": "10139:14:11"
                  }
                ],
                "id": 5037,
                "name": "ParameterList",
                "src": "10006:153:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5203,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5038,
                        "name": "ElementaryTypeName",
                        "src": "10183:4:11"
                      }
                    ],
                    "id": 5039,
                    "name": "VariableDeclaration",
                    "src": "10183:4:11"
                  }
                ],
                "id": 5040,
                "name": "ParameterList",
                "src": "10182:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5027,
                              "type": "uint32",
                              "value": "_paramId"
                            },
                            "id": 5041,
                            "name": "Identifier",
                            "src": "10207:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct ACL.Param storage ref[] storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4434,
                                      "type": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)",
                                      "value": "permissionParams"
                                    },
                                    "id": 5042,
                                    "name": "Identifier",
                                    "src": "10219:16:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5025,
                                      "type": "bytes32",
                                      "value": "_paramsHash"
                                    },
                                    "id": 5043,
                                    "name": "Identifier",
                                    "src": "10236:11:11"
                                  }
                                ],
                                "id": 5044,
                                "name": "IndexAccess",
                                "src": "10219:29:11"
                              }
                            ],
                            "id": 5045,
                            "name": "MemberAccess",
                            "src": "10219:36:11"
                          }
                        ],
                        "id": 5046,
                        "name": "BinaryOperation",
                        "src": "10207:48:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5040
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 5047,
                                "name": "Literal",
                                "src": "10278:5:11"
                              }
                            ],
                            "id": 5048,
                            "name": "Return",
                            "src": "10271:12:11"
                          }
                        ],
                        "id": 5049,
                        "name": "Block",
                        "src": "10257:54:11"
                      }
                    ],
                    "id": 5050,
                    "name": "IfStatement",
                    "src": "10203:108:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5052
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "param",
                          "scope": 5203,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct ACL.Param memory",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Param",
                              "referencedDeclaration": 4459,
                              "type": "struct ACL.Param storage pointer"
                            },
                            "id": 5051,
                            "name": "UserDefinedTypeName",
                            "src": "10321:5:11"
                          }
                        ],
                        "id": 5052,
                        "name": "VariableDeclaration",
                        "src": "10321:18:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct ACL.Param storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct ACL.Param storage ref[] storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4434,
                                  "type": "mapping(bytes32 => struct ACL.Param storage ref[] storage ref)",
                                  "value": "permissionParams"
                                },
                                "id": 5053,
                                "name": "Identifier",
                                "src": "10342:16:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5025,
                                  "type": "bytes32",
                                  "value": "_paramsHash"
                                },
                                "id": 5054,
                                "name": "Identifier",
                                "src": "10359:11:11"
                              }
                            ],
                            "id": 5055,
                            "name": "IndexAccess",
                            "src": "10342:29:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5027,
                              "type": "uint32",
                              "value": "_paramId"
                            },
                            "id": 5056,
                            "name": "Identifier",
                            "src": "10372:8:11"
                          }
                        ],
                        "id": 5057,
                        "name": "IndexAccess",
                        "src": "10342:39:11"
                      }
                    ],
                    "id": 5058,
                    "name": "VariableDeclarationStatement",
                    "src": "10321:60:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "id",
                              "referencedDeclaration": 4454,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5052,
                                  "type": "struct ACL.Param memory",
                                  "value": "param"
                                },
                                "id": 5059,
                                "name": "Identifier",
                                "src": "10396:5:11"
                              }
                            ],
                            "id": 5060,
                            "name": "MemberAccess",
                            "src": "10396:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4474,
                              "type": "uint8",
                              "value": "LOGIC_OP_PARAM_ID"
                            },
                            "id": 5061,
                            "name": "Identifier",
                            "src": "10408:17:11"
                          }
                        ],
                        "id": 5062,
                        "name": "BinaryOperation",
                        "src": "10396:29:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5040
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_Param_$4459_memory_ptr",
                                          "typeString": "struct ACL.Param memory"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5357,
                                      "type": "function (struct ACL.Param memory,bytes32,address,address,bytes32,uint256[] memory) view returns (bool)",
                                      "value": "evalLogic"
                                    },
                                    "id": 5063,
                                    "name": "Identifier",
                                    "src": "10448:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5052,
                                      "type": "struct ACL.Param memory",
                                      "value": "param"
                                    },
                                    "id": 5064,
                                    "name": "Identifier",
                                    "src": "10458:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5025,
                                      "type": "bytes32",
                                      "value": "_paramsHash"
                                    },
                                    "id": 5065,
                                    "name": "Identifier",
                                    "src": "10465:11:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5029,
                                      "type": "address",
                                      "value": "_who"
                                    },
                                    "id": 5066,
                                    "name": "Identifier",
                                    "src": "10478:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5031,
                                      "type": "address",
                                      "value": "_where"
                                    },
                                    "id": 5067,
                                    "name": "Identifier",
                                    "src": "10484:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5033,
                                      "type": "bytes32",
                                      "value": "_what"
                                    },
                                    "id": 5068,
                                    "name": "Identifier",
                                    "src": "10492:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5036,
                                      "type": "uint256[] memory",
                                      "value": "_how"
                                    },
                                    "id": 5069,
                                    "name": "Identifier",
                                    "src": "10499:4:11"
                                  }
                                ],
                                "id": 5070,
                                "name": "FunctionCall",
                                "src": "10448:56:11"
                              }
                            ],
                            "id": 5071,
                            "name": "Return",
                            "src": "10441:63:11"
                          }
                        ],
                        "id": 5072,
                        "name": "Block",
                        "src": "10427:88:11"
                      }
                    ],
                    "id": 5073,
                    "name": "IfStatement",
                    "src": "10392:123:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        null
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "value",
                          "scope": 5203,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5074,
                            "name": "ElementaryTypeName",
                            "src": "10525:7:11"
                          }
                        ],
                        "id": 5075,
                        "name": "VariableDeclaration",
                        "src": "10525:13:11"
                      }
                    ],
                    "id": 5076,
                    "name": "VariableDeclarationStatement",
                    "src": "10525:13:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5078
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "comparedTo",
                          "scope": 5203,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5077,
                            "name": "ElementaryTypeName",
                            "src": "10548:7:11"
                          }
                        ],
                        "id": 5078,
                        "name": "VariableDeclaration",
                        "src": "10548:18:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint256",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint240",
                                  "typeString": "uint240"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint256)",
                              "value": "uint256"
                            },
                            "id": 5079,
                            "name": "ElementaryTypeNameExpression",
                            "src": "10569:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "value",
                              "referencedDeclaration": 4458,
                              "type": "uint240"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5052,
                                  "type": "struct ACL.Param memory",
                                  "value": "param"
                                },
                                "id": 5080,
                                "name": "Identifier",
                                "src": "10577:5:11"
                              }
                            ],
                            "id": 5081,
                            "name": "MemberAccess",
                            "src": "10577:11:11"
                          }
                        ],
                        "id": 5082,
                        "name": "FunctionCall",
                        "src": "10569:20:11"
                      }
                    ],
                    "id": 5083,
                    "name": "VariableDeclarationStatement",
                    "src": "10548:41:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "id",
                              "referencedDeclaration": 4454,
                              "type": "uint8"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5052,
                                  "type": "struct ACL.Param memory",
                                  "value": "param"
                                },
                                "id": 5084,
                                "name": "Identifier",
                                "src": "10625:5:11"
                              }
                            ],
                            "id": 5085,
                            "name": "MemberAccess",
                            "src": "10625:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4471,
                              "type": "uint8",
                              "value": "ORACLE_PARAM_ID"
                            },
                            "id": 5086,
                            "name": "Identifier",
                            "src": "10637:15:11"
                          }
                        ],
                        "id": 5087,
                        "name": "BinaryOperation",
                        "src": "10625:27:11"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5075,
                                      "type": "uint256",
                                      "value": "value"
                                    },
                                    "id": 5088,
                                    "name": "Identifier",
                                    "src": "10668:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bool",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes32",
                                                  "typeString": "bytes32"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "canPerform",
                                              "referencedDeclaration": 4413,
                                              "type": "function (address,address,bytes32) view external returns (bool)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "contract ACLOracle",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_uint240",
                                                          "typeString": "uint240"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4414,
                                                      "type": "type(contract ACLOracle)",
                                                      "value": "ACLOracle"
                                                    },
                                                    "id": 5089,
                                                    "name": "Identifier",
                                                    "src": "10676:9:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "value",
                                                      "referencedDeclaration": 4458,
                                                      "type": "uint240"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 5052,
                                                          "type": "struct ACL.Param memory",
                                                          "value": "param"
                                                        },
                                                        "id": 5090,
                                                        "name": "Identifier",
                                                        "src": "10686:5:11"
                                                      }
                                                    ],
                                                    "id": 5091,
                                                    "name": "MemberAccess",
                                                    "src": "10686:11:11"
                                                  }
                                                ],
                                                "id": 5092,
                                                "name": "FunctionCall",
                                                "src": "10676:22:11"
                                              }
                                            ],
                                            "id": 5093,
                                            "name": "MemberAccess",
                                            "src": "10676:33:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5029,
                                              "type": "address",
                                              "value": "_who"
                                            },
                                            "id": 5094,
                                            "name": "Identifier",
                                            "src": "10710:4:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5031,
                                              "type": "address",
                                              "value": "_where"
                                            },
                                            "id": 5095,
                                            "name": "Identifier",
                                            "src": "10716:6:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5033,
                                              "type": "bytes32",
                                              "value": "_what"
                                            },
                                            "id": 5096,
                                            "name": "Identifier",
                                            "src": "10724:5:11"
                                          }
                                        ],
                                        "id": 5097,
                                        "name": "FunctionCall",
                                        "src": "10676:54:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 5098,
                                        "name": "Literal",
                                        "src": "10733:1:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 5099,
                                        "name": "Literal",
                                        "src": "10737:1:11"
                                      }
                                    ],
                                    "id": 5100,
                                    "name": "Conditional",
                                    "src": "10676:62:11"
                                  }
                                ],
                                "id": 5101,
                                "name": "Assignment",
                                "src": "10668:70:11"
                              }
                            ],
                            "id": 5102,
                            "name": "ExpressionStatement",
                            "src": "10668:70:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5078,
                                      "type": "uint256",
                                      "value": "comparedTo"
                                    },
                                    "id": 5103,
                                    "name": "Identifier",
                                    "src": "10752:10:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 5104,
                                    "name": "Literal",
                                    "src": "10765:1:11"
                                  }
                                ],
                                "id": 5105,
                                "name": "Assignment",
                                "src": "10752:14:11"
                              }
                            ],
                            "id": 5106,
                            "name": "ExpressionStatement",
                            "src": "10752:14:11"
                          }
                        ],
                        "id": 5107,
                        "name": "Block",
                        "src": "10654:123:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "id",
                                  "referencedDeclaration": 4454,
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5052,
                                      "type": "struct ACL.Param memory",
                                      "value": "param"
                                    },
                                    "id": 5108,
                                    "name": "Identifier",
                                    "src": "10787:5:11"
                                  }
                                ],
                                "id": 5109,
                                "name": "MemberAccess",
                                "src": "10787:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4462,
                                  "type": "uint8",
                                  "value": "BLOCK_NUMBER_PARAM_ID"
                                },
                                "id": 5110,
                                "name": "Identifier",
                                "src": "10799:21:11"
                              }
                            ],
                            "id": 5111,
                            "name": "BinaryOperation",
                            "src": "10787:33:11"
                          },
                          {
                            "children": [
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "=",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5075,
                                          "type": "uint256",
                                          "value": "value"
                                        },
                                        "id": 5112,
                                        "name": "Identifier",
                                        "src": "10836:5:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "arguments": [
                                            null
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                null
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5509,
                                              "type": "function () view returns (uint256)",
                                              "value": "blockN"
                                            },
                                            "id": 5113,
                                            "name": "Identifier",
                                            "src": "10844:6:11"
                                          }
                                        ],
                                        "id": 5114,
                                        "name": "FunctionCall",
                                        "src": "10844:8:11"
                                      }
                                    ],
                                    "id": 5115,
                                    "name": "Assignment",
                                    "src": "10836:16:11"
                                  }
                                ],
                                "id": 5116,
                                "name": "ExpressionStatement",
                                "src": "10836:16:11"
                              }
                            ],
                            "id": 5117,
                            "name": "Block",
                            "src": "10822:41:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "id",
                                      "referencedDeclaration": 4454,
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5052,
                                          "type": "struct ACL.Param memory",
                                          "value": "param"
                                        },
                                        "id": 5118,
                                        "name": "Identifier",
                                        "src": "10873:5:11"
                                      }
                                    ],
                                    "id": 5119,
                                    "name": "MemberAccess",
                                    "src": "10873:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4465,
                                      "type": "uint8",
                                      "value": "TIMESTAMP_PARAM_ID"
                                    },
                                    "id": 5120,
                                    "name": "Identifier",
                                    "src": "10885:18:11"
                                  }
                                ],
                                "id": 5121,
                                "name": "BinaryOperation",
                                "src": "10873:30:11"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5075,
                                              "type": "uint256",
                                              "value": "value"
                                            },
                                            "id": 5122,
                                            "name": "Identifier",
                                            "src": "10919:5:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "arguments": [
                                                null
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "type": "uint64",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    null
                                                  ],
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5500,
                                                  "type": "function () view returns (uint64)",
                                                  "value": "time"
                                                },
                                                "id": 5123,
                                                "name": "Identifier",
                                                "src": "10927:4:11"
                                              }
                                            ],
                                            "id": 5124,
                                            "name": "FunctionCall",
                                            "src": "10927:6:11"
                                          }
                                        ],
                                        "id": 5125,
                                        "name": "Assignment",
                                        "src": "10919:14:11"
                                      }
                                    ],
                                    "id": 5126,
                                    "name": "ExpressionStatement",
                                    "src": "10919:14:11"
                                  }
                                ],
                                "id": 5127,
                                "name": "Block",
                                "src": "10905:39:11"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "id",
                                          "referencedDeclaration": 4454,
                                          "type": "uint8"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5052,
                                              "type": "struct ACL.Param memory",
                                              "value": "param"
                                            },
                                            "id": 5128,
                                            "name": "Identifier",
                                            "src": "10954:5:11"
                                          }
                                        ],
                                        "id": 5129,
                                        "name": "MemberAccess",
                                        "src": "10954:8:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4468,
                                          "type": "uint8",
                                          "value": "SENDER_PARAM_ID"
                                        },
                                        "id": 5130,
                                        "name": "Identifier",
                                        "src": "10966:15:11"
                                      }
                                    ],
                                    "id": 5131,
                                    "name": "BinaryOperation",
                                    "src": "10954:27:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "=",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5075,
                                                  "type": "uint256",
                                                  "value": "value"
                                                },
                                                "id": 5132,
                                                "name": "Identifier",
                                                "src": "10997:5:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "uint256",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "type": "type(uint256)",
                                                      "value": "uint256"
                                                    },
                                                    "id": 5133,
                                                    "name": "ElementaryTypeNameExpression",
                                                    "src": "11005:7:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "sender",
                                                      "referencedDeclaration": null,
                                                      "type": "address"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 12590,
                                                          "type": "msg",
                                                          "value": "msg"
                                                        },
                                                        "id": 5134,
                                                        "name": "Identifier",
                                                        "src": "11013:3:11"
                                                      }
                                                    ],
                                                    "id": 5135,
                                                    "name": "MemberAccess",
                                                    "src": "11013:10:11"
                                                  }
                                                ],
                                                "id": 5136,
                                                "name": "FunctionCall",
                                                "src": "11005:19:11"
                                              }
                                            ],
                                            "id": 5137,
                                            "name": "Assignment",
                                            "src": "10997:27:11"
                                          }
                                        ],
                                        "id": 5138,
                                        "name": "ExpressionStatement",
                                        "src": "10997:27:11"
                                      }
                                    ],
                                    "id": 5139,
                                    "name": "Block",
                                    "src": "10983:52:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "==",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "id",
                                              "referencedDeclaration": 4454,
                                              "type": "uint8"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5052,
                                                  "type": "struct ACL.Param memory",
                                                  "value": "param"
                                                },
                                                "id": 5140,
                                                "name": "Identifier",
                                                "src": "11045:5:11"
                                              }
                                            ],
                                            "id": 5141,
                                            "name": "MemberAccess",
                                            "src": "11045:8:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4477,
                                              "type": "uint8",
                                              "value": "PARAM_VALUE_PARAM_ID"
                                            },
                                            "id": 5142,
                                            "name": "Identifier",
                                            "src": "11057:20:11"
                                          }
                                        ],
                                        "id": 5143,
                                        "name": "BinaryOperation",
                                        "src": "11045:32:11"
                                      },
                                      {
                                        "children": [
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5075,
                                                      "type": "uint256",
                                                      "value": "value"
                                                    },
                                                    "id": 5144,
                                                    "name": "Identifier",
                                                    "src": "11093:5:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "isStructConstructorCall": false,
                                                      "lValueRequested": false,
                                                      "names": [
                                                        null
                                                      ],
                                                      "type": "uint256",
                                                      "type_conversion": true
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_uint240",
                                                              "typeString": "uint240"
                                                            }
                                                          ],
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "type": "type(uint256)",
                                                          "value": "uint256"
                                                        },
                                                        "id": 5145,
                                                        "name": "ElementaryTypeNameExpression",
                                                        "src": "11101:7:11"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "member_name": "value",
                                                          "referencedDeclaration": 4458,
                                                          "type": "uint240"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 5052,
                                                              "type": "struct ACL.Param memory",
                                                              "value": "param"
                                                            },
                                                            "id": 5146,
                                                            "name": "Identifier",
                                                            "src": "11109:5:11"
                                                          }
                                                        ],
                                                        "id": 5147,
                                                        "name": "MemberAccess",
                                                        "src": "11109:11:11"
                                                      }
                                                    ],
                                                    "id": 5148,
                                                    "name": "FunctionCall",
                                                    "src": "11101:20:11"
                                                  }
                                                ],
                                                "id": 5149,
                                                "name": "Assignment",
                                                "src": "11093:28:11"
                                              }
                                            ],
                                            "id": 5150,
                                            "name": "ExpressionStatement",
                                            "src": "11093:28:11"
                                          }
                                        ],
                                        "id": 5151,
                                        "name": "Block",
                                        "src": "11079:53:11"
                                      },
                                      {
                                        "children": [
                                          {
                                            "attributes": {
                                              "falseBody": null
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": ">=",
                                                  "type": "bool"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "id",
                                                      "referencedDeclaration": 4454,
                                                      "type": "uint8"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 5052,
                                                          "type": "struct ACL.Param memory",
                                                          "value": "param"
                                                        },
                                                        "id": 5152,
                                                        "name": "Identifier",
                                                        "src": "11156:5:11"
                                                      }
                                                    ],
                                                    "id": 5153,
                                                    "name": "MemberAccess",
                                                    "src": "11156:8:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "length",
                                                      "referencedDeclaration": null,
                                                      "type": "uint256"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 5036,
                                                          "type": "uint256[] memory",
                                                          "value": "_how"
                                                        },
                                                        "id": 5154,
                                                        "name": "Identifier",
                                                        "src": "11168:4:11"
                                                      }
                                                    ],
                                                    "id": 5155,
                                                    "name": "MemberAccess",
                                                    "src": "11168:11:11"
                                                  }
                                                ],
                                                "id": 5156,
                                                "name": "BinaryOperation",
                                                "src": "11156:23:11"
                                              },
                                              {
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "functionReturnParameters": 5040
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "hexvalue": "66616c7365",
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "subdenomination": null,
                                                          "token": "bool",
                                                          "type": "bool",
                                                          "value": "false"
                                                        },
                                                        "id": 5157,
                                                        "name": "Literal",
                                                        "src": "11206:5:11"
                                                      }
                                                    ],
                                                    "id": 5158,
                                                    "name": "Return",
                                                    "src": "11199:12:11"
                                                  }
                                                ],
                                                "id": 5159,
                                                "name": "Block",
                                                "src": "11181:45:11"
                                              }
                                            ],
                                            "id": 5160,
                                            "name": "IfStatement",
                                            "src": "11152:74:11"
                                          },
                                          {
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "=",
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5075,
                                                      "type": "uint256",
                                                      "value": "value"
                                                    },
                                                    "id": 5161,
                                                    "name": "Identifier",
                                                    "src": "11239:5:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "isStructConstructorCall": false,
                                                      "lValueRequested": false,
                                                      "names": [
                                                        null
                                                      ],
                                                      "type": "uint256",
                                                      "type_conversion": true
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": [
                                                            {
                                                              "typeIdentifier": "t_uint240",
                                                              "typeString": "uint240"
                                                            }
                                                          ],
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "lValueRequested": false,
                                                          "type": "type(uint256)",
                                                          "value": "uint256"
                                                        },
                                                        "id": 5162,
                                                        "name": "ElementaryTypeNameExpression",
                                                        "src": "11247:7:11"
                                                      },
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": false,
                                                          "isStructConstructorCall": false,
                                                          "lValueRequested": false,
                                                          "names": [
                                                            null
                                                          ],
                                                          "type": "uint240",
                                                          "type_conversion": true
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": [
                                                                {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              ],
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": true,
                                                              "lValueRequested": false,
                                                              "type": "type(uint240)",
                                                              "value": "uint240"
                                                            },
                                                            "id": 5163,
                                                            "name": "ElementaryTypeNameExpression",
                                                            "src": "11255:7:11"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "isConstant": false,
                                                              "isLValue": true,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "type": "uint256"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "overloadedDeclarations": [
                                                                    null
                                                                  ],
                                                                  "referencedDeclaration": 5036,
                                                                  "type": "uint256[] memory",
                                                                  "value": "_how"
                                                                },
                                                                "id": 5164,
                                                                "name": "Identifier",
                                                                "src": "11263:4:11"
                                                              },
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "isConstant": false,
                                                                  "isLValue": true,
                                                                  "isPure": false,
                                                                  "lValueRequested": false,
                                                                  "member_name": "id",
                                                                  "referencedDeclaration": 4454,
                                                                  "type": "uint8"
                                                                },
                                                                "children": [
                                                                  {
                                                                    "attributes": {
                                                                      "argumentTypes": null,
                                                                      "overloadedDeclarations": [
                                                                        null
                                                                      ],
                                                                      "referencedDeclaration": 5052,
                                                                      "type": "struct ACL.Param memory",
                                                                      "value": "param"
                                                                    },
                                                                    "id": 5165,
                                                                    "name": "Identifier",
                                                                    "src": "11268:5:11"
                                                                  }
                                                                ],
                                                                "id": 5166,
                                                                "name": "MemberAccess",
                                                                "src": "11268:8:11"
                                                              }
                                                            ],
                                                            "id": 5167,
                                                            "name": "IndexAccess",
                                                            "src": "11263:14:11"
                                                          }
                                                        ],
                                                        "id": 5168,
                                                        "name": "FunctionCall",
                                                        "src": "11255:23:11"
                                                      }
                                                    ],
                                                    "id": 5169,
                                                    "name": "FunctionCall",
                                                    "src": "11247:32:11"
                                                  }
                                                ],
                                                "id": 5170,
                                                "name": "Assignment",
                                                "src": "11239:40:11"
                                              }
                                            ],
                                            "id": 5171,
                                            "name": "ExpressionStatement",
                                            "src": "11239:40:11"
                                          }
                                        ],
                                        "id": 5172,
                                        "name": "Block",
                                        "src": "11138:176:11"
                                      }
                                    ],
                                    "id": 5173,
                                    "name": "IfStatement",
                                    "src": "11041:273:11"
                                  }
                                ],
                                "id": 5174,
                                "name": "IfStatement",
                                "src": "10950:364:11"
                              }
                            ],
                            "id": 5175,
                            "name": "IfStatement",
                            "src": "10869:445:11"
                          }
                        ],
                        "id": 5176,
                        "name": "IfStatement",
                        "src": "10783:531:11"
                      }
                    ],
                    "id": 5177,
                    "name": "IfStatement",
                    "src": "10621:693:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "enum ACL.Op",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5178,
                                "name": "Identifier",
                                "src": "11328:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "op",
                                  "referencedDeclaration": 4456,
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5052,
                                      "type": "struct ACL.Param memory",
                                      "value": "param"
                                    },
                                    "id": 5179,
                                    "name": "Identifier",
                                    "src": "11331:5:11"
                                  }
                                ],
                                "id": 5180,
                                "name": "MemberAccess",
                                "src": "11331:8:11"
                              }
                            ],
                            "id": 5181,
                            "name": "FunctionCall",
                            "src": "11328:12:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "RET",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5182,
                                "name": "Identifier",
                                "src": "11344:2:11"
                              }
                            ],
                            "id": 5183,
                            "name": "MemberAccess",
                            "src": "11344:6:11"
                          }
                        ],
                        "id": 5184,
                        "name": "BinaryOperation",
                        "src": "11328:22:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5040
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint256)",
                                          "value": "uint256"
                                        },
                                        "id": 5185,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "11373:7:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5075,
                                          "type": "uint256",
                                          "value": "value"
                                        },
                                        "id": 5186,
                                        "name": "Identifier",
                                        "src": "11381:5:11"
                                      }
                                    ],
                                    "id": 5187,
                                    "name": "FunctionCall",
                                    "src": "11373:14:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 5188,
                                    "name": "Literal",
                                    "src": "11390:1:11"
                                  }
                                ],
                                "id": 5189,
                                "name": "BinaryOperation",
                                "src": "11373:18:11"
                              }
                            ],
                            "id": 5190,
                            "name": "Return",
                            "src": "11366:25:11"
                          }
                        ],
                        "id": 5191,
                        "name": "Block",
                        "src": "11352:50:11"
                      }
                    ],
                    "id": 5192,
                    "name": "IfStatement",
                    "src": "11324:78:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5040
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_enum$_Op_$4452",
                                  "typeString": "enum ACL.Op"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5425,
                              "type": "function (uint256,enum ACL.Op,uint256) pure returns (bool)",
                              "value": "compare"
                            },
                            "id": 5193,
                            "name": "Identifier",
                            "src": "11419:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5075,
                              "type": "uint256",
                              "value": "value"
                            },
                            "id": 5194,
                            "name": "Identifier",
                            "src": "11427:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "enum ACL.Op",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5195,
                                "name": "Identifier",
                                "src": "11434:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "op",
                                  "referencedDeclaration": 4456,
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5052,
                                      "type": "struct ACL.Param memory",
                                      "value": "param"
                                    },
                                    "id": 5196,
                                    "name": "Identifier",
                                    "src": "11437:5:11"
                                  }
                                ],
                                "id": 5197,
                                "name": "MemberAccess",
                                "src": "11437:8:11"
                              }
                            ],
                            "id": 5198,
                            "name": "FunctionCall",
                            "src": "11434:12:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5078,
                              "type": "uint256",
                              "value": "comparedTo"
                            },
                            "id": 5199,
                            "name": "Identifier",
                            "src": "11448:10:11"
                          }
                        ],
                        "id": 5200,
                        "name": "FunctionCall",
                        "src": "11419:40:11"
                      }
                    ],
                    "id": 5201,
                    "name": "Return",
                    "src": "11412:47:11"
                  }
                ],
                "id": 5202,
                "name": "Block",
                "src": "10193:1273:11"
              }
            ],
            "id": 5203,
            "name": "FunctionDefinition",
            "src": "9988:1478:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "evalLogic",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_param",
                      "scope": 5357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "struct ACL.Param memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Param",
                          "referencedDeclaration": 4459,
                          "type": "struct ACL.Param storage pointer"
                        },
                        "id": 5204,
                        "name": "UserDefinedTypeName",
                        "src": "11491:5:11"
                      }
                    ],
                    "id": 5205,
                    "name": "VariableDeclaration",
                    "src": "11491:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paramsHash",
                      "scope": 5357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5206,
                        "name": "ElementaryTypeName",
                        "src": "11505:7:11"
                      }
                    ],
                    "id": 5207,
                    "name": "VariableDeclaration",
                    "src": "11505:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_who",
                      "scope": 5357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5208,
                        "name": "ElementaryTypeName",
                        "src": "11526:7:11"
                      }
                    ],
                    "id": 5209,
                    "name": "VariableDeclaration",
                    "src": "11526:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 5357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5210,
                        "name": "ElementaryTypeName",
                        "src": "11540:7:11"
                      }
                    ],
                    "id": 5211,
                    "name": "VariableDeclaration",
                    "src": "11540:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 5357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5212,
                        "name": "ElementaryTypeName",
                        "src": "11556:7:11"
                      }
                    ],
                    "id": 5213,
                    "name": "VariableDeclaration",
                    "src": "11556:13:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_how",
                      "scope": 5357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "uint256[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5214,
                            "name": "ElementaryTypeName",
                            "src": "11571:7:11"
                          }
                        ],
                        "id": 5215,
                        "name": "ArrayTypeName",
                        "src": "11571:9:11"
                      }
                    ],
                    "id": 5216,
                    "name": "VariableDeclaration",
                    "src": "11571:14:11"
                  }
                ],
                "id": 5217,
                "name": "ParameterList",
                "src": "11490:96:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5218,
                        "name": "ElementaryTypeName",
                        "src": "11610:4:11"
                      }
                    ],
                    "id": 5219,
                    "name": "VariableDeclaration",
                    "src": "11610:4:11"
                  }
                ],
                "id": 5220,
                "name": "ParameterList",
                "src": "11609:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "enum ACL.Op",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5221,
                                "name": "Identifier",
                                "src": "11630:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "op",
                                  "referencedDeclaration": 4456,
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5205,
                                      "type": "struct ACL.Param memory",
                                      "value": "_param"
                                    },
                                    "id": 5222,
                                    "name": "Identifier",
                                    "src": "11633:6:11"
                                  }
                                ],
                                "id": 5223,
                                "name": "MemberAccess",
                                "src": "11633:9:11"
                              }
                            ],
                            "id": 5224,
                            "name": "FunctionCall",
                            "src": "11630:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "IF_ELSE",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5225,
                                "name": "Identifier",
                                "src": "11647:2:11"
                              }
                            ],
                            "id": 5226,
                            "name": "MemberAccess",
                            "src": "11647:10:11"
                          }
                        ],
                        "id": 5227,
                        "name": "BinaryOperation",
                        "src": "11630:27:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                5228,
                                5229,
                                5230
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "condition",
                                  "scope": 5357,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint32",
                                  "typeName": null,
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [],
                                "id": 5228,
                                "name": "VariableDeclaration",
                                "src": "11678:9:11"
                              },
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "success",
                                  "scope": 5357,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint32",
                                  "typeName": null,
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [],
                                "id": 5229,
                                "name": "VariableDeclaration",
                                "src": "11689:7:11"
                              },
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "failure",
                                  "scope": 5357,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint32",
                                  "typeName": null,
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [],
                                "id": 5230,
                                "name": "VariableDeclaration",
                                "src": "11698:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple(uint32,uint32,uint32)",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5979,
                                      "type": "function (uint256) pure returns (uint32,uint32,uint32)",
                                      "value": "decodeParamsList"
                                    },
                                    "id": 5231,
                                    "name": "Identifier",
                                    "src": "11709:16:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "uint256",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint240",
                                              "typeString": "uint240"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(uint256)",
                                          "value": "uint256"
                                        },
                                        "id": 5232,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "11726:7:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "value",
                                          "referencedDeclaration": 4458,
                                          "type": "uint240"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5205,
                                              "type": "struct ACL.Param memory",
                                              "value": "_param"
                                            },
                                            "id": 5233,
                                            "name": "Identifier",
                                            "src": "11734:6:11"
                                          }
                                        ],
                                        "id": 5234,
                                        "name": "MemberAccess",
                                        "src": "11734:12:11"
                                      }
                                    ],
                                    "id": 5235,
                                    "name": "FunctionCall",
                                    "src": "11726:21:11"
                                  }
                                ],
                                "id": 5236,
                                "name": "FunctionCall",
                                "src": "11709:39:11"
                              }
                            ],
                            "id": 5237,
                            "name": "VariableDeclarationStatement",
                            "src": "11673:75:11"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                5239
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "name": "result",
                                  "scope": 5357,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "bool",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bool",
                                      "type": "bool"
                                    },
                                    "id": 5238,
                                    "name": "ElementaryTypeName",
                                    "src": "11762:4:11"
                                  }
                                ],
                                "id": 5239,
                                "name": "VariableDeclaration",
                                "src": "11762:11:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5203,
                                      "type": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)",
                                      "value": "evalParam"
                                    },
                                    "id": 5240,
                                    "name": "Identifier",
                                    "src": "11776:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5207,
                                      "type": "bytes32",
                                      "value": "_paramsHash"
                                    },
                                    "id": 5241,
                                    "name": "Identifier",
                                    "src": "11786:11:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5228,
                                      "type": "uint32",
                                      "value": "condition"
                                    },
                                    "id": 5242,
                                    "name": "Identifier",
                                    "src": "11799:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5209,
                                      "type": "address",
                                      "value": "_who"
                                    },
                                    "id": 5243,
                                    "name": "Identifier",
                                    "src": "11810:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5211,
                                      "type": "address",
                                      "value": "_where"
                                    },
                                    "id": 5244,
                                    "name": "Identifier",
                                    "src": "11816:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5213,
                                      "type": "bytes32",
                                      "value": "_what"
                                    },
                                    "id": 5245,
                                    "name": "Identifier",
                                    "src": "11824:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5216,
                                      "type": "uint256[] memory",
                                      "value": "_how"
                                    },
                                    "id": 5246,
                                    "name": "Identifier",
                                    "src": "11831:4:11"
                                  }
                                ],
                                "id": 5247,
                                "name": "FunctionCall",
                                "src": "11776:60:11"
                              }
                            ],
                            "id": 5248,
                            "name": "VariableDeclarationStatement",
                            "src": "11762:74:11"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 5220
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_uint32",
                                          "typeString": "uint32"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                          "typeString": "uint256[] memory"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5203,
                                      "type": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)",
                                      "value": "evalParam"
                                    },
                                    "id": 5249,
                                    "name": "Identifier",
                                    "src": "11858:9:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5207,
                                      "type": "bytes32",
                                      "value": "_paramsHash"
                                    },
                                    "id": 5250,
                                    "name": "Identifier",
                                    "src": "11868:11:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "uint32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5239,
                                          "type": "bool",
                                          "value": "result"
                                        },
                                        "id": 5251,
                                        "name": "Identifier",
                                        "src": "11881:6:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5229,
                                          "type": "uint32",
                                          "value": "success"
                                        },
                                        "id": 5252,
                                        "name": "Identifier",
                                        "src": "11890:7:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5230,
                                          "type": "uint32",
                                          "value": "failure"
                                        },
                                        "id": 5253,
                                        "name": "Identifier",
                                        "src": "11900:7:11"
                                      }
                                    ],
                                    "id": 5254,
                                    "name": "Conditional",
                                    "src": "11881:26:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5209,
                                      "type": "address",
                                      "value": "_who"
                                    },
                                    "id": 5255,
                                    "name": "Identifier",
                                    "src": "11909:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5211,
                                      "type": "address",
                                      "value": "_where"
                                    },
                                    "id": 5256,
                                    "name": "Identifier",
                                    "src": "11915:6:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5213,
                                      "type": "bytes32",
                                      "value": "_what"
                                    },
                                    "id": 5257,
                                    "name": "Identifier",
                                    "src": "11923:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5216,
                                      "type": "uint256[] memory",
                                      "value": "_how"
                                    },
                                    "id": 5258,
                                    "name": "Identifier",
                                    "src": "11930:4:11"
                                  }
                                ],
                                "id": 5259,
                                "name": "FunctionCall",
                                "src": "11858:77:11"
                              }
                            ],
                            "id": 5260,
                            "name": "Return",
                            "src": "11851:84:11"
                          }
                        ],
                        "id": 5261,
                        "name": "Block",
                        "src": "11659:287:11"
                      }
                    ],
                    "id": 5262,
                    "name": "IfStatement",
                    "src": "11626:320:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5263,
                        5264,
                        null
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "v1",
                          "scope": 5357,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint32",
                          "typeName": null,
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [],
                        "id": 5263,
                        "name": "VariableDeclaration",
                        "src": "11961:2:11"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "name": "v2",
                          "scope": 5357,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint32",
                          "typeName": null,
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [],
                        "id": 5264,
                        "name": "VariableDeclaration",
                        "src": "11965:2:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple(uint32,uint32,uint32)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5979,
                              "type": "function (uint256) pure returns (uint32,uint32,uint32)",
                              "value": "decodeParamsList"
                            },
                            "id": 5265,
                            "name": "Identifier",
                            "src": "11972:16:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint240",
                                      "typeString": "uint240"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 5266,
                                "name": "ElementaryTypeNameExpression",
                                "src": "11989:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "value",
                                  "referencedDeclaration": 4458,
                                  "type": "uint240"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5205,
                                      "type": "struct ACL.Param memory",
                                      "value": "_param"
                                    },
                                    "id": 5267,
                                    "name": "Identifier",
                                    "src": "11997:6:11"
                                  }
                                ],
                                "id": 5268,
                                "name": "MemberAccess",
                                "src": "11997:12:11"
                              }
                            ],
                            "id": 5269,
                            "name": "FunctionCall",
                            "src": "11989:21:11"
                          }
                        ],
                        "id": 5270,
                        "name": "FunctionCall",
                        "src": "11972:39:11"
                      }
                    ],
                    "id": 5271,
                    "name": "VariableDeclarationStatement",
                    "src": "11956:55:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5273
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "r1",
                          "scope": 5357,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 5272,
                            "name": "ElementaryTypeName",
                            "src": "12021:4:11"
                          }
                        ],
                        "id": 5273,
                        "name": "VariableDeclaration",
                        "src": "12021:7:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5203,
                              "type": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)",
                              "value": "evalParam"
                            },
                            "id": 5274,
                            "name": "Identifier",
                            "src": "12031:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5207,
                              "type": "bytes32",
                              "value": "_paramsHash"
                            },
                            "id": 5275,
                            "name": "Identifier",
                            "src": "12041:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5263,
                              "type": "uint32",
                              "value": "v1"
                            },
                            "id": 5276,
                            "name": "Identifier",
                            "src": "12054:2:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5209,
                              "type": "address",
                              "value": "_who"
                            },
                            "id": 5277,
                            "name": "Identifier",
                            "src": "12058:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5211,
                              "type": "address",
                              "value": "_where"
                            },
                            "id": 5278,
                            "name": "Identifier",
                            "src": "12064:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5213,
                              "type": "bytes32",
                              "value": "_what"
                            },
                            "id": 5279,
                            "name": "Identifier",
                            "src": "12072:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5216,
                              "type": "uint256[] memory",
                              "value": "_how"
                            },
                            "id": 5280,
                            "name": "Identifier",
                            "src": "12079:4:11"
                          }
                        ],
                        "id": 5281,
                        "name": "FunctionCall",
                        "src": "12031:53:11"
                      }
                    ],
                    "id": 5282,
                    "name": "VariableDeclarationStatement",
                    "src": "12021:63:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "enum ACL.Op",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5283,
                                "name": "Identifier",
                                "src": "12099:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "op",
                                  "referencedDeclaration": 4456,
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5205,
                                      "type": "struct ACL.Param memory",
                                      "value": "_param"
                                    },
                                    "id": 5284,
                                    "name": "Identifier",
                                    "src": "12102:6:11"
                                  }
                                ],
                                "id": 5285,
                                "name": "MemberAccess",
                                "src": "12102:9:11"
                              }
                            ],
                            "id": 5286,
                            "name": "FunctionCall",
                            "src": "12099:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "NOT",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5287,
                                "name": "Identifier",
                                "src": "12116:2:11"
                              }
                            ],
                            "id": 5288,
                            "name": "MemberAccess",
                            "src": "12116:6:11"
                          }
                        ],
                        "id": 5289,
                        "name": "BinaryOperation",
                        "src": "12099:23:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5220
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "!",
                                  "prefix": true,
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5273,
                                      "type": "bool",
                                      "value": "r1"
                                    },
                                    "id": 5290,
                                    "name": "Identifier",
                                    "src": "12146:2:11"
                                  }
                                ],
                                "id": 5291,
                                "name": "UnaryOperation",
                                "src": "12145:3:11"
                              }
                            ],
                            "id": 5292,
                            "name": "Return",
                            "src": "12138:10:11"
                          }
                        ],
                        "id": 5293,
                        "name": "Block",
                        "src": "12124:35:11"
                      }
                    ],
                    "id": 5294,
                    "name": "IfStatement",
                    "src": "12095:64:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5273,
                              "type": "bool",
                              "value": "r1"
                            },
                            "id": 5295,
                            "name": "Identifier",
                            "src": "12173:2:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_Op_$4452",
                                "typeString": "enum ACL.Op"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "enum ACL.Op",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4452,
                                      "type": "type(enum ACL.Op)",
                                      "value": "Op"
                                    },
                                    "id": 5296,
                                    "name": "Identifier",
                                    "src": "12179:2:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "op",
                                      "referencedDeclaration": 4456,
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5205,
                                          "type": "struct ACL.Param memory",
                                          "value": "_param"
                                        },
                                        "id": 5297,
                                        "name": "Identifier",
                                        "src": "12182:6:11"
                                      }
                                    ],
                                    "id": 5298,
                                    "name": "MemberAccess",
                                    "src": "12182:9:11"
                                  }
                                ],
                                "id": 5299,
                                "name": "FunctionCall",
                                "src": "12179:13:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "OR",
                                  "referencedDeclaration": null,
                                  "type": "enum ACL.Op"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4452,
                                      "type": "type(enum ACL.Op)",
                                      "value": "Op"
                                    },
                                    "id": 5300,
                                    "name": "Identifier",
                                    "src": "12196:2:11"
                                  }
                                ],
                                "id": 5301,
                                "name": "MemberAccess",
                                "src": "12196:5:11"
                              }
                            ],
                            "id": 5302,
                            "name": "BinaryOperation",
                            "src": "12179:22:11"
                          }
                        ],
                        "id": 5303,
                        "name": "BinaryOperation",
                        "src": "12173:28:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5220
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 5304,
                                "name": "Literal",
                                "src": "12224:4:11"
                              }
                            ],
                            "id": 5305,
                            "name": "Return",
                            "src": "12217:11:11"
                          }
                        ],
                        "id": 5306,
                        "name": "Block",
                        "src": "12203:36:11"
                      }
                    ],
                    "id": 5307,
                    "name": "IfStatement",
                    "src": "12169:70:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5273,
                                  "type": "bool",
                                  "value": "r1"
                                },
                                "id": 5308,
                                "name": "Identifier",
                                "src": "12254:2:11"
                              }
                            ],
                            "id": 5309,
                            "name": "UnaryOperation",
                            "src": "12253:3:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_enum$_Op_$4452",
                                "typeString": "enum ACL.Op"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "enum ACL.Op",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4452,
                                      "type": "type(enum ACL.Op)",
                                      "value": "Op"
                                    },
                                    "id": 5310,
                                    "name": "Identifier",
                                    "src": "12260:2:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "op",
                                      "referencedDeclaration": 4456,
                                      "type": "uint8"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5205,
                                          "type": "struct ACL.Param memory",
                                          "value": "_param"
                                        },
                                        "id": 5311,
                                        "name": "Identifier",
                                        "src": "12263:6:11"
                                      }
                                    ],
                                    "id": 5312,
                                    "name": "MemberAccess",
                                    "src": "12263:9:11"
                                  }
                                ],
                                "id": 5313,
                                "name": "FunctionCall",
                                "src": "12260:13:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "AND",
                                  "referencedDeclaration": null,
                                  "type": "enum ACL.Op"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4452,
                                      "type": "type(enum ACL.Op)",
                                      "value": "Op"
                                    },
                                    "id": 5314,
                                    "name": "Identifier",
                                    "src": "12277:2:11"
                                  }
                                ],
                                "id": 5315,
                                "name": "MemberAccess",
                                "src": "12277:6:11"
                              }
                            ],
                            "id": 5316,
                            "name": "BinaryOperation",
                            "src": "12260:23:11"
                          }
                        ],
                        "id": 5317,
                        "name": "BinaryOperation",
                        "src": "12253:30:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5220
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 5318,
                                "name": "Literal",
                                "src": "12306:5:11"
                              }
                            ],
                            "id": 5319,
                            "name": "Return",
                            "src": "12299:12:11"
                          }
                        ],
                        "id": 5320,
                        "name": "Block",
                        "src": "12285:37:11"
                      }
                    ],
                    "id": 5321,
                    "name": "IfStatement",
                    "src": "12249:73:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5323
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "r2",
                          "scope": 5357,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 5322,
                            "name": "ElementaryTypeName",
                            "src": "12332:4:11"
                          }
                        ],
                        "id": 5323,
                        "name": "VariableDeclaration",
                        "src": "12332:7:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5203,
                              "type": "function (bytes32,uint32,address,address,bytes32,uint256[] memory) view returns (bool)",
                              "value": "evalParam"
                            },
                            "id": 5324,
                            "name": "Identifier",
                            "src": "12342:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5207,
                              "type": "bytes32",
                              "value": "_paramsHash"
                            },
                            "id": 5325,
                            "name": "Identifier",
                            "src": "12352:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5264,
                              "type": "uint32",
                              "value": "v2"
                            },
                            "id": 5326,
                            "name": "Identifier",
                            "src": "12365:2:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5209,
                              "type": "address",
                              "value": "_who"
                            },
                            "id": 5327,
                            "name": "Identifier",
                            "src": "12369:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5211,
                              "type": "address",
                              "value": "_where"
                            },
                            "id": 5328,
                            "name": "Identifier",
                            "src": "12375:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5213,
                              "type": "bytes32",
                              "value": "_what"
                            },
                            "id": 5329,
                            "name": "Identifier",
                            "src": "12383:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5216,
                              "type": "uint256[] memory",
                              "value": "_how"
                            },
                            "id": 5330,
                            "name": "Identifier",
                            "src": "12390:4:11"
                          }
                        ],
                        "id": 5331,
                        "name": "FunctionCall",
                        "src": "12342:53:11"
                      }
                    ],
                    "id": 5332,
                    "name": "VariableDeclarationStatement",
                    "src": "12332:63:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "enum ACL.Op",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5333,
                                "name": "Identifier",
                                "src": "12410:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "op",
                                  "referencedDeclaration": 4456,
                                  "type": "uint8"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5205,
                                      "type": "struct ACL.Param memory",
                                      "value": "_param"
                                    },
                                    "id": 5334,
                                    "name": "Identifier",
                                    "src": "12413:6:11"
                                  }
                                ],
                                "id": 5335,
                                "name": "MemberAccess",
                                "src": "12413:9:11"
                              }
                            ],
                            "id": 5336,
                            "name": "FunctionCall",
                            "src": "12410:13:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "XOR",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5337,
                                "name": "Identifier",
                                "src": "12427:2:11"
                              }
                            ],
                            "id": 5338,
                            "name": "MemberAccess",
                            "src": "12427:6:11"
                          }
                        ],
                        "id": 5339,
                        "name": "BinaryOperation",
                        "src": "12410:23:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5220
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "||",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "&&",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5273,
                                              "type": "bool",
                                              "value": "r1"
                                            },
                                            "id": 5340,
                                            "name": "Identifier",
                                            "src": "12457:2:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "!",
                                              "prefix": true,
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5323,
                                                  "type": "bool",
                                                  "value": "r2"
                                                },
                                                "id": 5341,
                                                "name": "Identifier",
                                                "src": "12464:2:11"
                                              }
                                            ],
                                            "id": 5342,
                                            "name": "UnaryOperation",
                                            "src": "12463:3:11"
                                          }
                                        ],
                                        "id": 5343,
                                        "name": "BinaryOperation",
                                        "src": "12457:9:11"
                                      }
                                    ],
                                    "id": 5344,
                                    "name": "TupleExpression",
                                    "src": "12456:11:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "&&",
                                          "type": "bool"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "!",
                                              "prefix": true,
                                              "type": "bool"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 5273,
                                                  "type": "bool",
                                                  "value": "r1"
                                                },
                                                "id": 5345,
                                                "name": "Identifier",
                                                "src": "12473:2:11"
                                              }
                                            ],
                                            "id": 5346,
                                            "name": "UnaryOperation",
                                            "src": "12472:3:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5323,
                                              "type": "bool",
                                              "value": "r2"
                                            },
                                            "id": 5347,
                                            "name": "Identifier",
                                            "src": "12479:2:11"
                                          }
                                        ],
                                        "id": 5348,
                                        "name": "BinaryOperation",
                                        "src": "12472:9:11"
                                      }
                                    ],
                                    "id": 5349,
                                    "name": "TupleExpression",
                                    "src": "12471:11:11"
                                  }
                                ],
                                "id": 5350,
                                "name": "BinaryOperation",
                                "src": "12456:26:11"
                              }
                            ],
                            "id": 5351,
                            "name": "Return",
                            "src": "12449:33:11"
                          }
                        ],
                        "id": 5352,
                        "name": "Block",
                        "src": "12435:58:11"
                      }
                    ],
                    "id": 5353,
                    "name": "IfStatement",
                    "src": "12406:87:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5220
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5323,
                          "type": "bool",
                          "value": "r2"
                        },
                        "id": 5354,
                        "name": "Identifier",
                        "src": "12510:2:11"
                      }
                    ],
                    "id": 5355,
                    "name": "Return",
                    "src": "12503:9:11"
                  }
                ],
                "id": 5356,
                "name": "Block",
                "src": "11616:958:11"
              }
            ],
            "id": 5357,
            "name": "FunctionDefinition",
            "src": "11472:1102:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "compare",
              "payable": false,
              "scope": 5510,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_a",
                      "scope": 5425,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5358,
                        "name": "ElementaryTypeName",
                        "src": "12597:7:11"
                      }
                    ],
                    "id": 5359,
                    "name": "VariableDeclaration",
                    "src": "12597:10:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_op",
                      "scope": 5425,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "enum ACL.Op",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Op",
                          "referencedDeclaration": 4452,
                          "type": "enum ACL.Op"
                        },
                        "id": 5360,
                        "name": "UserDefinedTypeName",
                        "src": "12609:2:11"
                      }
                    ],
                    "id": 5361,
                    "name": "VariableDeclaration",
                    "src": "12609:6:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_b",
                      "scope": 5425,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5362,
                        "name": "ElementaryTypeName",
                        "src": "12617:7:11"
                      }
                    ],
                    "id": 5363,
                    "name": "VariableDeclaration",
                    "src": "12617:10:11"
                  }
                ],
                "id": 5364,
                "name": "ParameterList",
                "src": "12596:32:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5425,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5365,
                        "name": "ElementaryTypeName",
                        "src": "12652:4:11"
                      }
                    ],
                    "id": 5366,
                    "name": "VariableDeclaration",
                    "src": "12652:4:11"
                  }
                ],
                "id": 5367,
                "name": "ParameterList",
                "src": "12651:6:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5361,
                              "type": "enum ACL.Op",
                              "value": "_op"
                            },
                            "id": 5368,
                            "name": "Identifier",
                            "src": "12672:3:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "EQ",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5369,
                                "name": "Identifier",
                                "src": "12679:2:11"
                              }
                            ],
                            "id": 5370,
                            "name": "MemberAccess",
                            "src": "12679:5:11"
                          }
                        ],
                        "id": 5371,
                        "name": "BinaryOperation",
                        "src": "12672:12:11"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 5367
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5359,
                                  "type": "uint256",
                                  "value": "_a"
                                },
                                "id": 5372,
                                "name": "Identifier",
                                "src": "12694:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5363,
                                  "type": "uint256",
                                  "value": "_b"
                                },
                                "id": 5373,
                                "name": "Identifier",
                                "src": "12700:2:11"
                              }
                            ],
                            "id": 5374,
                            "name": "BinaryOperation",
                            "src": "12694:8:11"
                          }
                        ],
                        "id": 5375,
                        "name": "Return",
                        "src": "12687:15:11"
                      }
                    ],
                    "id": 5376,
                    "name": "IfStatement",
                    "src": "12668:34:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5361,
                              "type": "enum ACL.Op",
                              "value": "_op"
                            },
                            "id": 5377,
                            "name": "Identifier",
                            "src": "12775:3:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "NEQ",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5378,
                                "name": "Identifier",
                                "src": "12782:2:11"
                              }
                            ],
                            "id": 5379,
                            "name": "MemberAccess",
                            "src": "12782:6:11"
                          }
                        ],
                        "id": 5380,
                        "name": "BinaryOperation",
                        "src": "12775:13:11"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 5367
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5359,
                                  "type": "uint256",
                                  "value": "_a"
                                },
                                "id": 5381,
                                "name": "Identifier",
                                "src": "12797:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5363,
                                  "type": "uint256",
                                  "value": "_b"
                                },
                                "id": 5382,
                                "name": "Identifier",
                                "src": "12803:2:11"
                              }
                            ],
                            "id": 5383,
                            "name": "BinaryOperation",
                            "src": "12797:8:11"
                          }
                        ],
                        "id": 5384,
                        "name": "Return",
                        "src": "12790:15:11"
                      }
                    ],
                    "id": 5385,
                    "name": "IfStatement",
                    "src": "12771:34:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5361,
                              "type": "enum ACL.Op",
                              "value": "_op"
                            },
                            "id": 5386,
                            "name": "Identifier",
                            "src": "12878:3:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "GT",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5387,
                                "name": "Identifier",
                                "src": "12885:2:11"
                              }
                            ],
                            "id": 5388,
                            "name": "MemberAccess",
                            "src": "12885:5:11"
                          }
                        ],
                        "id": 5389,
                        "name": "BinaryOperation",
                        "src": "12878:12:11"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 5367
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5359,
                                  "type": "uint256",
                                  "value": "_a"
                                },
                                "id": 5390,
                                "name": "Identifier",
                                "src": "12900:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5363,
                                  "type": "uint256",
                                  "value": "_b"
                                },
                                "id": 5391,
                                "name": "Identifier",
                                "src": "12905:2:11"
                              }
                            ],
                            "id": 5392,
                            "name": "BinaryOperation",
                            "src": "12900:7:11"
                          }
                        ],
                        "id": 5393,
                        "name": "Return",
                        "src": "12893:14:11"
                      }
                    ],
                    "id": 5394,
                    "name": "IfStatement",
                    "src": "12874:33:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5361,
                              "type": "enum ACL.Op",
                              "value": "_op"
                            },
                            "id": 5395,
                            "name": "Identifier",
                            "src": "12981:3:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "LT",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5396,
                                "name": "Identifier",
                                "src": "12988:2:11"
                              }
                            ],
                            "id": 5397,
                            "name": "MemberAccess",
                            "src": "12988:5:11"
                          }
                        ],
                        "id": 5398,
                        "name": "BinaryOperation",
                        "src": "12981:12:11"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 5367
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5359,
                                  "type": "uint256",
                                  "value": "_a"
                                },
                                "id": 5399,
                                "name": "Identifier",
                                "src": "13003:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5363,
                                  "type": "uint256",
                                  "value": "_b"
                                },
                                "id": 5400,
                                "name": "Identifier",
                                "src": "13008:2:11"
                              }
                            ],
                            "id": 5401,
                            "name": "BinaryOperation",
                            "src": "13003:7:11"
                          }
                        ],
                        "id": 5402,
                        "name": "Return",
                        "src": "12996:14:11"
                      }
                    ],
                    "id": 5403,
                    "name": "IfStatement",
                    "src": "12977:33:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5361,
                              "type": "enum ACL.Op",
                              "value": "_op"
                            },
                            "id": 5404,
                            "name": "Identifier",
                            "src": "13084:3:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "GTE",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5405,
                                "name": "Identifier",
                                "src": "13091:2:11"
                              }
                            ],
                            "id": 5406,
                            "name": "MemberAccess",
                            "src": "13091:6:11"
                          }
                        ],
                        "id": 5407,
                        "name": "BinaryOperation",
                        "src": "13084:13:11"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 5367
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5359,
                                  "type": "uint256",
                                  "value": "_a"
                                },
                                "id": 5408,
                                "name": "Identifier",
                                "src": "13106:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5363,
                                  "type": "uint256",
                                  "value": "_b"
                                },
                                "id": 5409,
                                "name": "Identifier",
                                "src": "13112:2:11"
                              }
                            ],
                            "id": 5410,
                            "name": "BinaryOperation",
                            "src": "13106:8:11"
                          }
                        ],
                        "id": 5411,
                        "name": "Return",
                        "src": "13099:15:11"
                      }
                    ],
                    "id": 5412,
                    "name": "IfStatement",
                    "src": "13080:34:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_enum$_Op_$4452",
                            "typeString": "enum ACL.Op"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5361,
                              "type": "enum ACL.Op",
                              "value": "_op"
                            },
                            "id": 5413,
                            "name": "Identifier",
                            "src": "13187:3:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "LTE",
                              "referencedDeclaration": null,
                              "type": "enum ACL.Op"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4452,
                                  "type": "type(enum ACL.Op)",
                                  "value": "Op"
                                },
                                "id": 5414,
                                "name": "Identifier",
                                "src": "13194:2:11"
                              }
                            ],
                            "id": 5415,
                            "name": "MemberAccess",
                            "src": "13194:6:11"
                          }
                        ],
                        "id": 5416,
                        "name": "BinaryOperation",
                        "src": "13187:13:11"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 5367
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5359,
                                  "type": "uint256",
                                  "value": "_a"
                                },
                                "id": 5417,
                                "name": "Identifier",
                                "src": "13209:2:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5363,
                                  "type": "uint256",
                                  "value": "_b"
                                },
                                "id": 5418,
                                "name": "Identifier",
                                "src": "13215:2:11"
                              }
                            ],
                            "id": 5419,
                            "name": "BinaryOperation",
                            "src": "13209:8:11"
                          }
                        ],
                        "id": 5420,
                        "name": "Return",
                        "src": "13202:15:11"
                      }
                    ],
                    "id": 5421,
                    "name": "IfStatement",
                    "src": "13183:34:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5367
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "66616c7365",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "false"
                        },
                        "id": 5422,
                        "name": "Literal",
                        "src": "13293:5:11"
                      }
                    ],
                    "id": 5423,
                    "name": "Return",
                    "src": "13286:12:11"
                  }
                ],
                "id": 5424,
                "name": "Block",
                "src": "12658:647:11"
              }
            ],
            "id": 5425,
            "name": "FunctionDefinition",
            "src": "12580:725:11"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "_setPermissionManager",
              "payable": false,
              "scope": 5510,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newManager",
                      "scope": 5450,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5426,
                        "name": "ElementaryTypeName",
                        "src": "13407:7:11"
                      }
                    ],
                    "id": 5427,
                    "name": "VariableDeclaration",
                    "src": "13407:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_app",
                      "scope": 5450,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5428,
                        "name": "ElementaryTypeName",
                        "src": "13428:7:11"
                      }
                    ],
                    "id": 5429,
                    "name": "VariableDeclaration",
                    "src": "13428:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_role",
                      "scope": 5450,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5430,
                        "name": "ElementaryTypeName",
                        "src": "13442:7:11"
                      }
                    ],
                    "id": 5431,
                    "name": "VariableDeclaration",
                    "src": "13442:13:11"
                  }
                ],
                "id": 5432,
                "name": "ParameterList",
                "src": "13406:50:11"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5433,
                "name": "ParameterList",
                "src": "13466:0:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4438,
                                  "type": "mapping(bytes32 => address)",
                                  "value": "permissionManager"
                                },
                                "id": 5434,
                                "name": "Identifier",
                                "src": "13476:17:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5468,
                                      "type": "function (address,bytes32) pure returns (bytes32)",
                                      "value": "roleHash"
                                    },
                                    "id": 5435,
                                    "name": "Identifier",
                                    "src": "13494:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5429,
                                      "type": "address",
                                      "value": "_app"
                                    },
                                    "id": 5436,
                                    "name": "Identifier",
                                    "src": "13503:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5431,
                                      "type": "bytes32",
                                      "value": "_role"
                                    },
                                    "id": 5437,
                                    "name": "Identifier",
                                    "src": "13509:5:11"
                                  }
                                ],
                                "id": 5438,
                                "name": "FunctionCall",
                                "src": "13494:21:11"
                              }
                            ],
                            "id": 5439,
                            "name": "IndexAccess",
                            "src": "13476:40:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5427,
                              "type": "address",
                              "value": "_newManager"
                            },
                            "id": 5440,
                            "name": "Identifier",
                            "src": "13519:11:11"
                          }
                        ],
                        "id": 5441,
                        "name": "Assignment",
                        "src": "13476:54:11"
                      }
                    ],
                    "id": 5442,
                    "name": "ExpressionStatement",
                    "src": "13476:54:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4526,
                              "type": "function (address,bytes32,address)",
                              "value": "ChangePermissionManager"
                            },
                            "id": 5443,
                            "name": "Identifier",
                            "src": "13540:23:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5429,
                              "type": "address",
                              "value": "_app"
                            },
                            "id": 5444,
                            "name": "Identifier",
                            "src": "13564:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5431,
                              "type": "bytes32",
                              "value": "_role"
                            },
                            "id": 5445,
                            "name": "Identifier",
                            "src": "13570:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5427,
                              "type": "address",
                              "value": "_newManager"
                            },
                            "id": 5446,
                            "name": "Identifier",
                            "src": "13577:11:11"
                          }
                        ],
                        "id": 5447,
                        "name": "FunctionCall",
                        "src": "13540:49:11"
                      }
                    ],
                    "id": 5448,
                    "name": "ExpressionStatement",
                    "src": "13540:49:11"
                  }
                ],
                "id": 5449,
                "name": "Block",
                "src": "13466:130:11"
              }
            ],
            "id": 5450,
            "name": "FunctionDefinition",
            "src": "13376:220:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "roleHash",
              "payable": false,
              "scope": 5510,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 5468,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5451,
                        "name": "ElementaryTypeName",
                        "src": "13620:7:11"
                      }
                    ],
                    "id": 5452,
                    "name": "VariableDeclaration",
                    "src": "13620:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 5468,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5453,
                        "name": "ElementaryTypeName",
                        "src": "13636:7:11"
                      }
                    ],
                    "id": 5454,
                    "name": "VariableDeclaration",
                    "src": "13636:13:11"
                  }
                ],
                "id": 5455,
                "name": "ParameterList",
                "src": "13619:31:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5468,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5456,
                        "name": "ElementaryTypeName",
                        "src": "13674:7:11"
                      }
                    ],
                    "id": 5457,
                    "name": "VariableDeclaration",
                    "src": "13674:7:11"
                  }
                ],
                "id": 5458,
                "name": "ParameterList",
                "src": "13673:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5458
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12584,
                              "type": "function () pure returns (bytes32)",
                              "value": "keccak256"
                            },
                            "id": 5459,
                            "name": "Identifier",
                            "src": "13700:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 5460,
                                "name": "ElementaryTypeNameExpression",
                                "src": "13710:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "31",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 1",
                                  "value": "1"
                                },
                                "id": 5461,
                                "name": "Literal",
                                "src": "13718:1:11"
                              }
                            ],
                            "id": 5462,
                            "name": "FunctionCall",
                            "src": "13710:10:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5452,
                              "type": "address",
                              "value": "_where"
                            },
                            "id": 5463,
                            "name": "Identifier",
                            "src": "13722:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5454,
                              "type": "bytes32",
                              "value": "_what"
                            },
                            "id": 5464,
                            "name": "Identifier",
                            "src": "13730:5:11"
                          }
                        ],
                        "id": 5465,
                        "name": "FunctionCall",
                        "src": "13700:36:11"
                      }
                    ],
                    "id": 5466,
                    "name": "Return",
                    "src": "13693:43:11"
                  }
                ],
                "id": 5467,
                "name": "Block",
                "src": "13683:60:11"
              }
            ],
            "id": 5468,
            "name": "FunctionDefinition",
            "src": "13602:141:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "permissionHash",
              "payable": false,
              "scope": 5510,
              "stateMutability": "pure",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_who",
                      "scope": 5489,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5469,
                        "name": "ElementaryTypeName",
                        "src": "13773:7:11"
                      }
                    ],
                    "id": 5470,
                    "name": "VariableDeclaration",
                    "src": "13773:12:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_where",
                      "scope": 5489,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5471,
                        "name": "ElementaryTypeName",
                        "src": "13787:7:11"
                      }
                    ],
                    "id": 5472,
                    "name": "VariableDeclaration",
                    "src": "13787:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_what",
                      "scope": 5489,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5473,
                        "name": "ElementaryTypeName",
                        "src": "13803:7:11"
                      }
                    ],
                    "id": 5474,
                    "name": "VariableDeclaration",
                    "src": "13803:13:11"
                  }
                ],
                "id": 5475,
                "name": "ParameterList",
                "src": "13772:45:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5489,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 5476,
                        "name": "ElementaryTypeName",
                        "src": "13841:7:11"
                      }
                    ],
                    "id": 5477,
                    "name": "VariableDeclaration",
                    "src": "13841:7:11"
                  }
                ],
                "id": 5478,
                "name": "ParameterList",
                "src": "13840:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5478
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bytes32",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12584,
                              "type": "function () pure returns (bytes32)",
                              "value": "keccak256"
                            },
                            "id": 5479,
                            "name": "Identifier",
                            "src": "13867:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "uint256",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(uint256)",
                                  "value": "uint256"
                                },
                                "id": 5480,
                                "name": "ElementaryTypeNameExpression",
                                "src": "13877:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "32",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 2",
                                  "value": "2"
                                },
                                "id": 5481,
                                "name": "Literal",
                                "src": "13885:1:11"
                              }
                            ],
                            "id": 5482,
                            "name": "FunctionCall",
                            "src": "13877:10:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5470,
                              "type": "address",
                              "value": "_who"
                            },
                            "id": 5483,
                            "name": "Identifier",
                            "src": "13889:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5472,
                              "type": "address",
                              "value": "_where"
                            },
                            "id": 5484,
                            "name": "Identifier",
                            "src": "13895:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5474,
                              "type": "bytes32",
                              "value": "_what"
                            },
                            "id": 5485,
                            "name": "Identifier",
                            "src": "13903:5:11"
                          }
                        ],
                        "id": 5486,
                        "name": "FunctionCall",
                        "src": "13867:42:11"
                      }
                    ],
                    "id": 5487,
                    "name": "Return",
                    "src": "13860:49:11"
                  }
                ],
                "id": 5488,
                "name": "Block",
                "src": "13850:66:11"
              }
            ],
            "id": 5489,
            "name": "FunctionDefinition",
            "src": "13749:167:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "time",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5490,
                "name": "ParameterList",
                "src": "13935:2:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5500,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint64",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint64",
                          "type": "uint64"
                        },
                        "id": 5491,
                        "name": "ElementaryTypeName",
                        "src": "13961:6:11"
                      }
                    ],
                    "id": 5492,
                    "name": "VariableDeclaration",
                    "src": "13961:6:11"
                  }
                ],
                "id": 5493,
                "name": "ParameterList",
                "src": "13960:8:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5493
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "uint64",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(uint64)",
                              "value": "uint64"
                            },
                            "id": 5494,
                            "name": "ElementaryTypeNameExpression",
                            "src": "13978:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 12582,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 5495,
                                "name": "Identifier",
                                "src": "13985:5:11"
                              }
                            ],
                            "id": 5496,
                            "name": "MemberAccess",
                            "src": "13985:15:11"
                          }
                        ],
                        "id": 5497,
                        "name": "FunctionCall",
                        "src": "13978:23:11"
                      }
                    ],
                    "id": 5498,
                    "name": "Return",
                    "src": "13971:30:11"
                  }
                ],
                "id": 5499,
                "name": "Block",
                "src": "13969:35:11"
              }
            ],
            "id": 5500,
            "name": "FunctionDefinition",
            "src": "13922:82:11"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "blockN",
              "payable": false,
              "scope": 5510,
              "stateMutability": "view",
              "superFunction": null,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5501,
                "name": "ParameterList",
                "src": "14074:2:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 5509,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5502,
                        "name": "ElementaryTypeName",
                        "src": "14100:7:11"
                      }
                    ],
                    "id": 5503,
                    "name": "VariableDeclaration",
                    "src": "14100:7:11"
                  }
                ],
                "id": 5504,
                "name": "ParameterList",
                "src": "14099:9:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5504
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "number",
                          "referencedDeclaration": null,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 12582,
                              "type": "block",
                              "value": "block"
                            },
                            "id": 5505,
                            "name": "Identifier",
                            "src": "14118:5:11"
                          }
                        ],
                        "id": 5506,
                        "name": "MemberAccess",
                        "src": "14118:12:11"
                      }
                    ],
                    "id": 5507,
                    "name": "Return",
                    "src": "14111:19:11"
                  }
                ],
                "id": 5508,
                "name": "Block",
                "src": "14109:24:11"
              }
            ],
            "id": 5509,
            "name": "FunctionDefinition",
            "src": "14059:74:11"
          }
        ],
        "id": 5510,
        "name": "ContractDefinition",
        "src": "231:13904:11"
      }
    ],
    "id": 5511,
    "name": "SourceUnit",
    "src": "0:14136:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.18+commit.9cf6e910.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "1.0.1",
  "updatedAt": "2018-03-14T08:41:25.081Z"
}