{
  "contractName": "DirectoryStorage",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "_role_id",
          "type": "uint256"
        }
      ],
      "name": "read_role",
      "outputs": [
        {
          "name": "_name",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_group_id",
          "type": "uint256"
        }
      ],
      "name": "read_group",
      "outputs": [
        {
          "name": "_role_id",
          "type": "uint256"
        },
        {
          "name": "_name",
          "type": "bytes32"
        },
        {
          "name": "_document",
          "type": "bytes32"
        },
        {
          "name": "_members_count",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "read_user_role_id",
      "outputs": [
        {
          "name": "_role_id",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "read_user",
      "outputs": [
        {
          "name": "_group_id",
          "type": "uint256"
        },
        {
          "name": "_role_id",
          "type": "uint256"
        },
        {
          "name": "_document",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "read_first_group",
      "outputs": [
        {
          "name": "_group_id",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "read_last_group",
      "outputs": [
        {
          "name": "_group_id",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_current_group_id",
          "type": "uint256"
        }
      ],
      "name": "read_previous_group_from_group",
      "outputs": [
        {
          "name": "_group_id",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_current_group_id",
          "type": "uint256"
        }
      ],
      "name": "read_next_group_from_group",
      "outputs": [
        {
          "name": "_group_id",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "read_total_groups",
      "outputs": [
        {
          "name": "_total_groups",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_group_id",
          "type": "bytes32"
        }
      ],
      "name": "read_first_user_in_group",
      "outputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_group_id",
          "type": "bytes32"
        }
      ],
      "name": "read_last_user_in_group",
      "outputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_group_id",
          "type": "bytes32"
        },
        {
          "name": "_current_user",
          "type": "address"
        }
      ],
      "name": "read_next_user_in_group",
      "outputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_group_id",
          "type": "bytes32"
        },
        {
          "name": "_current_user",
          "type": "address"
        }
      ],
      "name": "read_previous_user_in_group",
      "outputs": [
        {
          "name": "_user",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_group_id",
          "type": "bytes32"
        }
      ],
      "name": "read_total_users_in_group",
      "outputs": [
        {
          "name": "_total_users",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611109806100206000396000f3006080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631d8b86b4146100d557806320a4c22d14610100578063339f38b61461012b57806338eeb1871461017457806339d20a5f146101e557806350c7e73b14610252578063657dcf0b146102c3578063ba16cfc714610329578063c31d02b214610354578063c97f5104146103ab578063dbee9e5b1461043c578063e17078c314610481578063eae2083f146104c2578063ee9589aa14610553575b600080fd5b3480156100e157600080fd5b506100ea610594565b6040518082815260200191505060405180910390f35b34801561010c57600080fd5b506101156105a7565b6040518082815260200191505060405180910390f35b34801561013757600080fd5b50610156600480360381019080803590602001909291905050506105ba565b60405180826000191660001916815260200191505060405180910390f35b34801561018057600080fd5b506101a360048036038101908080356000191690602001909291905050506105d9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f157600080fd5b50610226600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f0565b604051808481526020018381526020018260001916600019168152602001935050505060405180910390f35b34801561025e57600080fd5b5061028160048036038101908080356000191690602001909291905050506106b8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102cf57600080fd5b506102ee600480360381019080803590602001909291905050506106cf565b604051808581526020018460001916600019168152602001836000191660001916815260200182815260200194505050505060405180910390f35b34801561033557600080fd5b5061033e610830565b6040518082815260200191505060405180910390f35b34801561036057600080fd5b50610395600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610843565b6040518082815260200191505060405180910390f35b3480156103b757600080fd5b506103fa6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044857600080fd5b5061046b60048036038101908080356000191690602001909291905050506108c6565b6040518082815260200191505060405180910390f35b34801561048d57600080fd5b506104ac600480360381019080803590602001909291905050506108dd565b6040518082815260200191505060405180910390f35b3480156104ce57600080fd5b506105116004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561055f57600080fd5b5061057e6004803603810190808035906020019092919050505061090c565b6040518082815260200191505060405180910390f35b60006105a260008001610922565b905090565b60006105b5600080016109d3565b905090565b6000806009016000838152602001908152602001600020549050919050565b60006105e9600060060183610a84565b9050919050565b60008060008060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600060070160008481526020019081526020016000206002015491506000600701600084815260200190815260200160002060030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490509193909250565b60006106c8600060060183610b46565b9050919050565b6000806000806000800173__DoublyLinkedList______________________639500c08e9091876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15801561074d57600080fd5b505af4158015610761573d6000803e3d6000fd5b505050506040513d602081101561077757600080fd5b8101908080519060200190929190505050156107f9576000600701600086815260200190815260200160002060020154935060006007016000868152602001908152602001600020600001549250600060070160008681526020019081526020016000206001015491506107f2600060060186600102610c08565b9050610829565b600093507f696e76616c696400000000000000000000000000000000000000000000000000925060009150600090505b9193509193565b600061083e60008001610cca565b905090565b600080600060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600701600082815260200190815260200160002060020154915050919050565b60006108be60006006018484610d7b565b905092915050565b60006108d6600060060183610c08565b9050919050565b60006108ec6000800183610e72565b9050919050565b600061090460006006018484610f2c565b905092915050565b600061091b6000800183611023565b9050919050565b60008173__DoublyLinkedList______________________631240ff5a90916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561099157600080fd5b505af41580156109a5573d6000803e3d6000fd5b505050506040513d60208110156109bb57600080fd5b81019080805190602001909291905050509050919050565b60008173__DoublyLinkedList______________________633ae6974290916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610a4257600080fd5b505af4158015610a56573d6000803e3d6000fd5b505050506040513d6020811015610a6c57600080fd5b81019080805190602001909291905050509050919050565b60008273__DoublyLinkedList______________________63b0c29efb9091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610b0357600080fd5b505af4158015610b17573d6000803e3d6000fd5b505050506040513d6020811015610b2d57600080fd5b8101908080519060200190929190505050905092915050565b60008273__DoublyLinkedList______________________63c501bf569091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610bc557600080fd5b505af4158015610bd9573d6000803e3d6000fd5b505050506040513d6020811015610bef57600080fd5b8101908080519060200190929190505050905092915050565b60008273__DoublyLinkedList______________________6355a0a1bf9091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610c8757600080fd5b505af4158015610c9b573d6000803e3d6000fd5b505050506040513d6020811015610cb157600080fd5b8101908080519060200190929190505050905092915050565b60008173__DoublyLinkedList______________________635e0d4aa990916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610d3957600080fd5b505af4158015610d4d573d6000803e3d6000fd5b505050506040513d6020811015610d6357600080fd5b81019080805190602001909291905050509050919050565b60008373__DoublyLinkedList______________________6320482030909185856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b158015610e2e57600080fd5b505af4158015610e42573d6000803e3d6000fd5b505050506040513d6020811015610e5857600080fd5b810190808051906020019092919050505090509392505050565b60008273__DoublyLinkedList______________________6340c6bb189091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015610ee957600080fd5b505af4158015610efd573d6000803e3d6000fd5b505050506040513d6020811015610f1357600080fd5b8101908080519060200190929190505050905092915050565b60008373__DoublyLinkedList______________________63675a4ef0909185856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b158015610fdf57600080fd5b505af4158015610ff3573d6000803e3d6000fd5b505050506040513d602081101561100957600080fd5b810190808051906020019092919050505090509392505050565b60008273__DoublyLinkedList______________________63ec40b8979091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15801561109a57600080fd5b505af41580156110ae573d6000803e3d6000fd5b505050506040513d60208110156110c457600080fd5b81019080805190602001909291905050509050929150505600a165627a7a7230582094cc7eca2b5ffbf7508d3e176ad8db25efed60655160bc7c8f479fbf1d2031f30029",
  "deployedBytecode": "0x6080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631d8b86b4146100d557806320a4c22d14610100578063339f38b61461012b57806338eeb1871461017457806339d20a5f146101e557806350c7e73b14610252578063657dcf0b146102c3578063ba16cfc714610329578063c31d02b214610354578063c97f5104146103ab578063dbee9e5b1461043c578063e17078c314610481578063eae2083f146104c2578063ee9589aa14610553575b600080fd5b3480156100e157600080fd5b506100ea610594565b6040518082815260200191505060405180910390f35b34801561010c57600080fd5b506101156105a7565b6040518082815260200191505060405180910390f35b34801561013757600080fd5b50610156600480360381019080803590602001909291905050506105ba565b60405180826000191660001916815260200191505060405180910390f35b34801561018057600080fd5b506101a360048036038101908080356000191690602001909291905050506105d9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101f157600080fd5b50610226600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f0565b604051808481526020018381526020018260001916600019168152602001935050505060405180910390f35b34801561025e57600080fd5b5061028160048036038101908080356000191690602001909291905050506106b8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102cf57600080fd5b506102ee600480360381019080803590602001909291905050506106cf565b604051808581526020018460001916600019168152602001836000191660001916815260200182815260200194505050505060405180910390f35b34801561033557600080fd5b5061033e610830565b6040518082815260200191505060405180910390f35b34801561036057600080fd5b50610395600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610843565b6040518082815260200191505060405180910390f35b3480156103b757600080fd5b506103fa6004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108ad565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044857600080fd5b5061046b60048036038101908080356000191690602001909291905050506108c6565b6040518082815260200191505060405180910390f35b34801561048d57600080fd5b506104ac600480360381019080803590602001909291905050506108dd565b6040518082815260200191505060405180910390f35b3480156104ce57600080fd5b506105116004803603810190808035600019169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561055f57600080fd5b5061057e6004803603810190808035906020019092919050505061090c565b6040518082815260200191505060405180910390f35b60006105a260008001610922565b905090565b60006105b5600080016109d3565b905090565b6000806009016000838152602001908152602001600020549050919050565b60006105e9600060060183610a84565b9050919050565b60008060008060080160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600060070160008481526020019081526020016000206002015491506000600701600084815260200190815260200160002060030160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490509193909250565b60006106c8600060060183610b46565b9050919050565b6000806000806000800173__DoublyLinkedList______________________639500c08e9091876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15801561074d57600080fd5b505af4158015610761573d6000803e3d6000fd5b505050506040513d602081101561077757600080fd5b8101908080519060200190929190505050156107f9576000600701600086815260200190815260200160002060020154935060006007016000868152602001908152602001600020600001549250600060070160008681526020019081526020016000206001015491506107f2600060060186600102610c08565b9050610829565b600093507f696e76616c696400000000000000000000000000000000000000000000000000925060009150600090505b9193509193565b600061083e60008001610cca565b905090565b600080600060080160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600701600082815260200190815260200160002060020154915050919050565b60006108be60006006018484610d7b565b905092915050565b60006108d6600060060183610c08565b9050919050565b60006108ec6000800183610e72565b9050919050565b600061090460006006018484610f2c565b905092915050565b600061091b6000800183611023565b9050919050565b60008173__DoublyLinkedList______________________631240ff5a90916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561099157600080fd5b505af41580156109a5573d6000803e3d6000fd5b505050506040513d60208110156109bb57600080fd5b81019080805190602001909291905050509050919050565b60008173__DoublyLinkedList______________________633ae6974290916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610a4257600080fd5b505af4158015610a56573d6000803e3d6000fd5b505050506040513d6020811015610a6c57600080fd5b81019080805190602001909291905050509050919050565b60008273__DoublyLinkedList______________________63b0c29efb9091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610b0357600080fd5b505af4158015610b17573d6000803e3d6000fd5b505050506040513d6020811015610b2d57600080fd5b8101908080519060200190929190505050905092915050565b60008273__DoublyLinkedList______________________63c501bf569091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610bc557600080fd5b505af4158015610bd9573d6000803e3d6000fd5b505050506040513d6020811015610bef57600080fd5b8101908080519060200190929190505050905092915050565b60008273__DoublyLinkedList______________________6355a0a1bf9091846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600019166000191681526020019250505060206040518083038186803b158015610c8757600080fd5b505af4158015610c9b573d6000803e3d6000fd5b505050506040513d6020811015610cb157600080fd5b8101908080519060200190929190505050905092915050565b60008173__DoublyLinkedList______________________635e0d4aa990916040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610d3957600080fd5b505af4158015610d4d573d6000803e3d6000fd5b505050506040513d6020811015610d6357600080fd5b81019080805190602001909291905050509050919050565b60008373__DoublyLinkedList______________________6320482030909185856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b158015610e2e57600080fd5b505af4158015610e42573d6000803e3d6000fd5b505050506040513d6020811015610e5857600080fd5b810190808051906020019092919050505090509392505050565b60008273__DoublyLinkedList______________________6340c6bb189091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b158015610ee957600080fd5b505af4158015610efd573d6000803e3d6000fd5b505050506040513d6020811015610f1357600080fd5b8101908080519060200190929190505050905092915050565b60008373__DoublyLinkedList______________________63675a4ef0909185856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060206040518083038186803b158015610fdf57600080fd5b505af4158015610ff3573d6000803e3d6000fd5b505050506040513d602081101561100957600080fd5b810190808051906020019092919050505090509392505050565b60008273__DoublyLinkedList______________________63ec40b8979091846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018281526020019250505060206040518083038186803b15801561109a57600080fd5b505af41580156110ae573d6000803e3d6000fd5b505050506040513d60208110156110c457600080fd5b81019080805190602001909291905050509050929150505600a165627a7a7230582094cc7eca2b5ffbf7508d3e176ad8db25efed60655160bc7c8f479fbf1d2031f30029",
  "sourceMap": "287:9954:68:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:9954:68;;;;;;;",
  "deployedSourceMap": "287:9954:68:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6589:164;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6589:164:68;;;;;;;;;;;;;;;;;;;;;;;7973:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7973:168:68;;;;;;;;;;;;;;;;;;;;;;;2053:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2053:159:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8278:224;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8278:224:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6136:345;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6136:345:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8638:222;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8638:222:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3245:605;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3245:605:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6859:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6859:162:68;;;;;;;;;;;;;;;;;;;;;;;5666:240;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5666:240:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9580:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9580:268:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10005:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10005:234:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7223:225;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7223:225:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9088:260;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9088:260:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7642:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7642:217:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6589:164;6673:17;6712:36;6734:6;:13;;6712:21;:36::i;:::-;6700:48;;6589:164;:::o;7973:168::-;8058:21;8105:31;8122:6;:13;;8105:16;:31::i;:::-;8089:47;;7973:168;:::o;2053:159::-;2148:13;2179:6;:18;;:28;2198:8;2179:28;;;;;;;;;;;;2171:36;;2053:159;;;:::o;8278:224::-;8387:13;8418:79;8452:6;:24;;8486:9;8418:33;:79::i;:::-;8410:87;;8278:224;;;:::o;6136:345::-;6228:17;6247:16;6265:17;6304:6;:27;;:34;6332:5;6304:34;;;;;;;;;;;;;;;;6292:46;;6355:6;:19;;:30;6375:9;6355:30;;;;;;;;;;;:38;;;6344:49;;6411:6;:19;;:30;6431:9;6411:30;;;;;;;;;;;:49;;:56;6461:5;6411:56;;;;;;;;;;;;;;;:65;;;6399:77;;6136:345;;;;;:::o;8638:222::-;8746:13;8777:78;8810:6;:24;;8844:9;8777:32;:78::i;:::-;8769:86;;8638:222;;;:::o;3245:605::-;3342:16;3360:13;3375:17;3394:22;3430:6;:13;;:24;;;;3455:9;3430:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3430:35:68;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3430:35:68;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3430:35:68;;;;;;;;;;;;;;;;3426:420;;;3486:6;:19;;:30;3506:9;3486:30;;;;;;;;;;;:38;;;3475:49;;3540:6;:19;;:30;3560:9;3540:30;;;;;;;;;;;:35;;;3532:43;;3595:6;:19;;:30;3615:9;3595:30;;;;;;;;;;;:39;;;3583:51;;3659:74;3688:6;:24;;3722:9;3714:18;;3659:28;:74::i;:::-;3642:91;;3426:420;;;3765:1;3754:12;;3774:17;;;3799:14;;;3838:1;3821:18;;3426:420;3245:605;;;;;:::o;6859:162::-;6942:17;6981:35;7002:6;:13;;6981:20;:35::i;:::-;6969:47;;6859:162;:::o;5666:240::-;5766:16;5792:17;5812:6;:27;;:34;5840:5;5812:34;;;;;;;;;;;;;;;;5792:54;;5863:6;:19;;:30;5883:9;5863:30;;;;;;;;;;;:38;;;5852:49;;5666:240;;;;:::o;9580:268::-;9715:13;9746:97;9783:6;:24;;9817:9;9829:13;9746:36;:97::i;:::-;9738:105;;9580:268;;;;:::o;10005:234::-;10115:20;10160:74;10189:6;:24;;10223:9;10160:28;:74::i;:::-;10145:89;;10005:234;;;:::o;7223:225::-;7346:17;7385:58;7410:6;:13;;7425:17;7385:24;:58::i;:::-;7373:70;;7223:225;;;:::o;9088:260::-;9219:13;9250:93;9283:6;:24;;9317:9;9329:13;9250:32;:93::i;:::-;9242:101;;9088:260;;;;:::o;7642:217::-;7761:17;7800:54;7821:6;:13;;7836:17;7800:20;:54::i;:::-;7788:66;;7642:217;;;:::o;390:182:80:-;518:13;549:5;:16;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;549:18:80;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;549:18:80;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;549:18:80;;;;;;;;;;;;;;;;541:26;;390:182;;;:::o;2071:174::-;2194:14;2227:5;:11;;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2227:13:80;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2227:13:80;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2227:13:80;;;;;;;;;;;;;;;;2218:22;;2071:174;;;:::o;557:248:78:-;734:13;765:5;:16;;;;782:17;765:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;765:35:78;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;765:35:78;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;765:35:78;;;;;;;;;;;;;;;;757:43;;557:248;;;;:::o;1042:245::-;1218:13;1249:5;:14;;;;1264:17;1249:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1249:33:78;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1249:33:78;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1249:33:78;;;;;;;;;;;;;;;;1241:41;;1042:245;;;;:::o;2809:240::-;2981:14;3014:5;:11;;;;3026:17;3014:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3014:30:78;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3014:30:78;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3014:30:78;;;;;;;;;;;;;;;;3005:39;;2809:240;;;;:::o;744:179:80:-;871:13;902:5;:14;;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;902:16:80;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;902:16:80;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;902:16:80;;;;;;;;;;;;;;;;894:24;;744:179;;;:::o;2258:292:78:-;2461:13;2492:5;:19;;;;2512:17;2531:13;2492:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2492:53:78;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2492:53:78;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2492:53:78;;;;;;;;;;;;;;;;2484:61;;2258:292;;;;;:::o;1653:224:80:-;1807:13;1838:5;:19;;;;1858:13;1838:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1838:34:80;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1838:34:80;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1838:34:80;;;;;;;;;;;;;;;;1830:42;;1653:224;;;;:::o;1627:284:78:-;1826:13;1857:5;:15;;;;1873:17;1892:13;1857:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1857:49:78;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1857:49:78;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1857:49:78;;;;;;;;;;;;;;;;1849:57;;1627:284;;;;;:::o;1176:216:80:-;1326:13;1357:5;:15;;;;1373:13;1357:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1357:30:80;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1357:30:80;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1357:30:80;;;;;;;;;;;;;;;;1349:38;;1176:216;;;;:::o",
  "source": "pragma solidity ^0.4.16;\n\nimport \"@digix/solidity-collections/contracts/abstract/IndexedAddressIteratorStorage.sol\";\nimport \"@digix/solidity-collections/contracts/abstract/UintIteratorStorage.sol\";\n\n/**\n@title Directory Storage contains information of a directory\n@author DigixGlobal\n*/\ncontract DirectoryStorage is IndexedAddressIteratorStorage, UintIteratorStorage {\n\n  using DoublyLinkedList for DoublyLinkedList.IndexedAddress;\n  using DoublyLinkedList for DoublyLinkedList.Uint;\n\n  struct User {\n    bytes32 document;\n    bool active;\n  }\n\n  struct Group {\n    bytes32 name;\n    bytes32 document;\n    uint256 role_id;\n    mapping(address => User) members_by_address;\n  }\n\n  struct System {\n    DoublyLinkedList.Uint groups;\n    DoublyLinkedList.IndexedAddress groups_collection;\n    mapping (uint256 => Group) groups_by_id;\n    mapping (address => uint256) group_ids_by_address;\n    mapping (uint256 => bytes32) roles_by_id;\n    bool initialized;\n    uint256 total_groups;\n  }\n\n  System system;\n\n  /**\n  @notice Initializes directory settings\n  @return _success If directory initialization is successful\n  */\n  function initialize_directory()\n           internal\n           returns (bool _success)\n  {\n    require(system.initialized == false);\n    system.total_groups = 0;\n    system.initialized = true;\n    internal_create_role(1, \"root\");\n    internal_create_group(1, \"root\", \"\");\n    _success = internal_update_add_user_to_group(1, tx.origin, \"\");\n  }\n\n  /**\n  @notice Creates a new role with the given information\n  @param _role_id Id of the new role\n  @param _name Name of the new role\n  @return {\"_success\": \"If creation of new role is successful\"}\n  */\n  function internal_create_role(uint256 _role_id, bytes32 _name)\n           internal\n           returns (bool _success)\n  {\n    require(_role_id > 0);\n    require(_name != bytes32(0x0));\n    system.roles_by_id[_role_id] = _name;\n    _success = true;\n  }\n\n  /**\n  @notice Returns the role's name of a role id\n  @param _role_id Id of the role\n  @return {\"_name\": \"Name of the role\"}\n  */\n  function read_role(uint256 _role_id)\n           public\n           constant\n           returns (bytes32 _name)\n  {\n    _name = system.roles_by_id[_role_id];\n  }\n\n  /**\n  @notice Creates a new group with the given information\n  @param _role_id Role id of the new group\n  @param _name Name of the new group\n  @param _document Document of the new group\n  @return {\n    \"_success\": \"If creation of the new group is successful\",\n    \"_group_id: \"Id of the new group\"\n  }\n  */\n  function internal_create_group(uint256 _role_id, bytes32 _name, bytes32 _document)\n           internal\n           returns (bool _success, uint256 _group_id)\n  {\n    require(_role_id > 0);\n    require(read_role(_role_id) != bytes32(0x0));\n    _group_id = ++system.total_groups;\n    system.groups.append(_group_id);\n    system.groups_by_id[_group_id].role_id = _role_id;\n    system.groups_by_id[_group_id].name = _name;\n    system.groups_by_id[_group_id].document = _document;\n    _success = true;\n  }\n\n  /**\n  @notice Returns the group's information\n  @param _group_id Id of the group\n  @return {\n    \"_role_id\": \"Role id of the group\",\n    \"_name: \"Name of the group\",\n    \"_document: \"Document of the group\"\n  }\n  */\n  function read_group(uint256 _group_id)\n           public\n           constant\n           returns (uint256 _role_id, bytes32 _name, bytes32 _document, uint256 _members_count)\n  {\n    if (system.groups.valid_item(_group_id)) {\n      _role_id = system.groups_by_id[_group_id].role_id;\n      _name = system.groups_by_id[_group_id].name;\n      _document = system.groups_by_id[_group_id].document;\n      _members_count = read_total_indexed_addresses(system.groups_collection, bytes32(_group_id));\n    } else {\n      _role_id = 0;\n      _name = \"invalid\";\n      _document = \"\";\n      _members_count = 0;\n    }\n  }\n\n  /**\n  @notice Adds new user with the given information to a group\n  @param _group_id Id of the group\n  @param _user Address of the new user\n  @param _document Information of the new user\n  @return {\"_success\": \"If adding new user to a group is successful\"}\n  */\n  function internal_update_add_user_to_group(uint256 _group_id, address _user, bytes32 _document)\n           internal\n           returns (bool _success)\n  {\n    if (system.groups_by_id[_group_id].members_by_address[_user].active == false && system.group_ids_by_address[_user] == 0 && system.groups_by_id[_group_id].role_id != 0) {\n\n      system.groups_by_id[_group_id].members_by_address[_user].active = true;\n      system.group_ids_by_address[_user] = _group_id;\n      system.groups_collection.append(bytes32(_group_id), _user);\n      system.groups_by_id[_group_id].members_by_address[_user].document = _document;\n      _success = true;\n    } else {\n      _success = false;\n    }\n  }\n\n  /**\n  @notice Removes user from its group\n  @param _user Address of the user\n  @return {\"_success\": \"If removing of user is successful\"}\n  */\n  function internal_destroy_group_user(address _user)\n           internal\n           returns (bool _success)\n  {\n    uint256 _group_id = system.group_ids_by_address[_user];\n    if ((_group_id == 1) && (system.groups_collection.total(bytes32(_group_id)) == 1)) {\n      _success = false;\n    } else {\n      system.groups_by_id[_group_id].members_by_address[_user].active = false;\n      system.group_ids_by_address[_user] = 0;\n      delete system.groups_by_id[_group_id].members_by_address[_user];\n      _success = system.groups_collection.remove_item(bytes32(_group_id), _user);\n    }\n  }\n\n  /**\n  @notice Returns the role id of a user\n  @param _user Address of a user\n  @return {\"_role_id\": \"Role id of the user\"}\n  */\n  function read_user_role_id(address _user)\n           constant\n           public\n           returns (uint256 _role_id)\n  {\n    uint256 _group_id = system.group_ids_by_address[_user];\n    _role_id = system.groups_by_id[_group_id].role_id;\n  }\n\n  /**\n  @notice Returns the user's information\n  @param _user Address of the user\n  @return {\n    \"_group_id\": \"Group id of the user\",\n    \"_role_id\": \"Role id of the user\",\n    \"_document\": \"Information of the user\"\n  }\n  */\n  function read_user(address _user)\n           public\n           constant\n           returns (uint256 _group_id, uint256 _role_id, bytes32 _document)\n  {\n    _group_id = system.group_ids_by_address[_user];\n    _role_id = system.groups_by_id[_group_id].role_id;\n    _document = system.groups_by_id[_group_id].members_by_address[_user].document;\n  }\n\n  /**\n  @notice Returns the id of the first group\n  @return {\"_group_id\": \"Id of the first group\"}\n  */\n  function read_first_group()\n           view\n           external\n           returns (uint256 _group_id)\n  {\n    _group_id = read_first_from_uints(system.groups);\n  }\n\n  /**\n  @notice Returns the id of the last group\n  @return {\"_group_id\": \"Id of the last group\"}\n  */\n  function read_last_group()\n           view\n           external\n           returns (uint256 _group_id)\n  {\n    _group_id = read_last_from_uints(system.groups);\n  }\n\n  /**\n  @notice Returns the id of the previous group depending on the given current group\n  @param _current_group_id Id of the current group\n  @return {\"_group_id\": \"Id of the previous group\"}\n  */\n  function read_previous_group_from_group(uint256 _current_group_id)\n           view\n           external\n           returns (uint256 _group_id)\n  {\n    _group_id = read_previous_from_uints(system.groups, _current_group_id);\n  }\n\n  /**\n  @notice Returns the id of the next group depending on the given current group\n  @param _current_group_id Id of the current group\n  @return {\"_group_id\": \"Id of the next group\"}\n  */\n  function read_next_group_from_group(uint256 _current_group_id)\n           view\n           external\n           returns (uint256 _group_id)\n  {\n    _group_id = read_next_from_uints(system.groups, _current_group_id);\n  }\n\n  /**\n  @notice Returns the total number of groups\n  @return {\"_total_groups\": \"Total number of groups\"}\n  */\n  function read_total_groups()\n           view\n           external\n           returns (uint256 _total_groups)\n  {\n    _total_groups = read_total_uints(system.groups);\n  }\n\n  /**\n  @notice Returns the first user of a group\n  @param _group_id Id of the group\n  @return {\"_user\": \"Address of the user\"}\n  */\n  function read_first_user_in_group(bytes32 _group_id)\n           view\n           external\n           returns (address _user)\n  {\n    _user = read_first_from_indexed_addresses(system.groups_collection, bytes32(_group_id));\n  }\n\n  /**\n  @notice Returns the last user of a group\n  @param _group_id Id of the group\n  @return {\"_user\": \"Address of the user\"}\n  */\n  function read_last_user_in_group(bytes32 _group_id)\n           view\n           external\n           returns (address _user)\n  {\n    _user = read_last_from_indexed_addresses(system.groups_collection, bytes32(_group_id));\n  }\n\n  /**\n  @notice Returns the next user of a group depending on the given current user\n  @param _group_id Id of the group\n  @param _current_user Address of the current user\n  @return {\"_user\": \"Address of the next user\"}\n  */\n  function read_next_user_in_group(bytes32 _group_id, address _current_user)\n           view\n           external\n           returns (address _user)\n  {\n    _user = read_next_from_indexed_addresses(system.groups_collection, bytes32(_group_id), _current_user);\n  }\n\n  /**\n  @notice Returns the previous user of a group depending on the given current user\n  @param _group_id Id of the group\n  @param _current_user Address of the current user\n  @return {\"_user\": \"Address of the last user\"}\n  */\n  function read_previous_user_in_group(bytes32 _group_id, address _current_user)\n           view\n           external\n           returns (address _user)\n  {\n    _user = read_previous_from_indexed_addresses(system.groups_collection, bytes32(_group_id), _current_user);\n  }\n\n  /**\n  @notice Returns the total number of users of a group\n  @param _group_id Id of the group\n  @return {\"_total_users\": \"Total number of users\"}\n  */\n  function read_total_users_in_group(bytes32 _group_id)\n           view\n           external\n           returns (uint256 _total_users)\n  {\n    _total_users = read_total_indexed_addresses(system.groups_collection, bytes32(_group_id));\n  }\n}\n",
  "sourcePath": "@digix/cdap/contracts/storage/DirectoryStorage.sol",
  "ast": {
    "absolutePath": "@digix/cdap/contracts/storage/DirectoryStorage.sol",
    "exportedSymbols": {
      "DirectoryStorage": [
        19321
      ]
    },
    "id": 19322,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18630,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".16"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:68"
      },
      {
        "absolutePath": "@digix/solidity-collections/contracts/abstract/IndexedAddressIteratorStorage.sol",
        "file": "@digix/solidity-collections/contracts/abstract/IndexedAddressIteratorStorage.sol",
        "id": 18631,
        "nodeType": "ImportDirective",
        "scope": 19322,
        "sourceUnit": 22148,
        "src": "26:90:68",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/solidity-collections/contracts/abstract/UintIteratorStorage.sol",
        "file": "@digix/solidity-collections/contracts/abstract/UintIteratorStorage.sol",
        "id": 18632,
        "nodeType": "ImportDirective",
        "scope": 19322,
        "sourceUnit": 22558,
        "src": "117:80:68",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18633,
              "name": "IndexedAddressIteratorStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22147,
              "src": "316:29:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IndexedAddressIteratorStorage_$22147",
                "typeString": "contract IndexedAddressIteratorStorage"
              }
            },
            "id": 18634,
            "nodeType": "InheritanceSpecifier",
            "src": "316:29:68"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18635,
              "name": "UintIteratorStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22557,
              "src": "347:19:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UintIteratorStorage_$22557",
                "typeString": "contract UintIteratorStorage"
              }
            },
            "id": 18636,
            "nodeType": "InheritanceSpecifier",
            "src": "347:19:68"
          }
        ],
        "contractDependencies": [
          22147,
          22557
        ],
        "contractKind": "contract",
        "documentation": "@title Directory Storage contains information of a directory\n@author DigixGlobal",
        "fullyImplemented": true,
        "id": 19321,
        "linearizedBaseContracts": [
          19321,
          22557,
          22147
        ],
        "name": "DirectoryStorage",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 18639,
            "libraryName": {
              "contractScope": null,
              "id": 18637,
              "name": "DoublyLinkedList",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25116,
              "src": "378:16:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DoublyLinkedList_$25116",
                "typeString": "library DoublyLinkedList"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "372:59:68",
            "typeName": {
              "contractScope": null,
              "id": 18638,
              "name": "DoublyLinkedList.IndexedAddress",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22594,
              "src": "399:31:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage_ptr",
                "typeString": "struct DoublyLinkedList.IndexedAddress"
              }
            }
          },
          {
            "id": 18642,
            "libraryName": {
              "contractScope": null,
              "id": 18640,
              "name": "DoublyLinkedList",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25116,
              "src": "440:16:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DoublyLinkedList_$25116",
                "typeString": "library DoublyLinkedList"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "434:49:68",
            "typeName": {
              "contractScope": null,
              "id": 18641,
              "name": "DoublyLinkedList.Uint",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22608,
              "src": "461:21:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Uint_$22608_storage_ptr",
                "typeString": "struct DoublyLinkedList.Uint"
              }
            }
          },
          {
            "canonicalName": "DirectoryStorage.User",
            "id": 18647,
            "members": [
              {
                "constant": false,
                "id": 18644,
                "name": "document",
                "nodeType": "VariableDeclaration",
                "scope": 18647,
                "src": "505:16:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 18643,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "505:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18646,
                "name": "active",
                "nodeType": "VariableDeclaration",
                "scope": 18647,
                "src": "527:11:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 18645,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "527:4:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "User",
            "nodeType": "StructDefinition",
            "scope": 19321,
            "src": "487:56:68",
            "visibility": "public"
          },
          {
            "canonicalName": "DirectoryStorage.Group",
            "id": 18658,
            "members": [
              {
                "constant": false,
                "id": 18649,
                "name": "name",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "566:12:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 18648,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "566:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18651,
                "name": "document",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "584:16:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 18650,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "584:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18653,
                "name": "role_id",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "606:15:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 18652,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "606:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18657,
                "name": "members_by_address",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "627:43:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                  "typeString": "mapping(address => struct DirectoryStorage.User)"
                },
                "typeName": {
                  "id": 18656,
                  "keyType": {
                    "id": 18654,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "635:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "627:24:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                    "typeString": "mapping(address => struct DirectoryStorage.User)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 18655,
                    "name": "User",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18647,
                    "src": "646:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_User_$18647_storage_ptr",
                      "typeString": "struct DirectoryStorage.User"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Group",
            "nodeType": "StructDefinition",
            "scope": 19321,
            "src": "547:128:68",
            "visibility": "public"
          },
          {
            "canonicalName": "DirectoryStorage.System",
            "id": 18679,
            "members": [
              {
                "constant": false,
                "id": 18660,
                "name": "groups",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "699:28:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Uint_$22608_storage_ptr",
                  "typeString": "struct DoublyLinkedList.Uint"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 18659,
                  "name": "DoublyLinkedList.Uint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 22608,
                  "src": "699:21:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Uint_$22608_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Uint"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18662,
                "name": "groups_collection",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "733:49:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage_ptr",
                  "typeString": "struct DoublyLinkedList.IndexedAddress"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 18661,
                  "name": "DoublyLinkedList.IndexedAddress",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 22594,
                  "src": "733:31:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage_ptr",
                    "typeString": "struct DoublyLinkedList.IndexedAddress"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18666,
                "name": "groups_by_id",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "788:39:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group)"
                },
                "typeName": {
                  "id": 18665,
                  "keyType": {
                    "id": 18663,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "797:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "788:26:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                    "typeString": "mapping(uint256 => struct DirectoryStorage.Group)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 18664,
                    "name": "Group",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18658,
                    "src": "808:5:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Group_$18658_storage_ptr",
                      "typeString": "struct DirectoryStorage.Group"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18670,
                "name": "group_ids_by_address",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "833:49:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 18669,
                  "keyType": {
                    "id": 18667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "842:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "833:28:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 18668,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "853:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18674,
                "name": "roles_by_id",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "888:40:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                  "typeString": "mapping(uint256 => bytes32)"
                },
                "typeName": {
                  "id": 18673,
                  "keyType": {
                    "id": 18671,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "888:28:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                    "typeString": "mapping(uint256 => bytes32)"
                  },
                  "valueType": {
                    "id": 18672,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "908:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18676,
                "name": "initialized",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "934:16:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 18675,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "934:4:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18678,
                "name": "total_groups",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "956:20:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 18677,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "956:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "System",
            "nodeType": "StructDefinition",
            "scope": 19321,
            "src": "679:302:68",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 18681,
            "name": "system",
            "nodeType": "VariableDeclaration",
            "scope": 19321,
            "src": "985:13:68",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_System_$18679_storage",
              "typeString": "struct DirectoryStorage.System"
            },
            "typeName": {
              "contractScope": null,
              "id": 18680,
              "name": "System",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 18679,
              "src": "985:6:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_System_$18679_storage_ptr",
                "typeString": "struct DirectoryStorage.System"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18725,
              "nodeType": "Block",
              "src": "1205:254:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 18690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18687,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "1219:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18688,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "initialized",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18676,
                          "src": "1219:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 18689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1241:5:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "1219:27:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18686,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1211:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1211:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18692,
                  "nodeType": "ExpressionStatement",
                  "src": "1211:36:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18693,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "1253:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 18695,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "total_groups",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18678,
                      "src": "1253:19:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1275:1:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1253:23:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18698,
                  "nodeType": "ExpressionStatement",
                  "src": "1253:23:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18699,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "1282:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 18701,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialized",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18676,
                      "src": "1282:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 18702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1303:4:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1282:25:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18704,
                  "nodeType": "ExpressionStatement",
                  "src": "1282:25:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1334:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726f6f74",
                        "id": 18707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1337:6:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        },
                        "value": "root"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        }
                      ],
                      "id": 18705,
                      "name": "internal_create_role",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18762,
                      "src": "1313:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (uint256,bytes32) returns (bool)"
                      }
                    },
                    "id": 18708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1313:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18709,
                  "nodeType": "ExpressionStatement",
                  "src": "1313:31:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1372:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726f6f74",
                        "id": 18712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1375:6:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        },
                        "value": "root"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "",
                        "id": 18713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1383:2:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 18710,
                      "name": "internal_create_group",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18852,
                      "src": "1350:21:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$_t_uint256_$",
                        "typeString": "function (uint256,bytes32,bytes32) returns (bool,uint256)"
                      }
                    },
                    "id": 18714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1350:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                      "typeString": "tuple(bool,uint256)"
                    }
                  },
                  "id": 18715,
                  "nodeType": "ExpressionStatement",
                  "src": "1350:36:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18716,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18684,
                      "src": "1392:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 18718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1437:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18719,
                            "name": "tx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26194,
                            "src": "1440:2:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_transaction",
                              "typeString": "tx"
                            }
                          },
                          "id": 18720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1440:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "",
                          "id": 18721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1451:2:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          }
                        ],
                        "id": 18717,
                        "name": "internal_update_add_user_to_group",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19015,
                        "src": "1403:33:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (uint256,address,bytes32) returns (bool)"
                        }
                      },
                      "id": 18722,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1403:51:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1392:62:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18724,
                  "nodeType": "ExpressionStatement",
                  "src": "1392:62:68"
                }
              ]
            },
            "documentation": "@notice Initializes directory settings\n@return _success If directory initialization is successful",
            "id": 18726,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "initialize_directory",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18682,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1145:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18684,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 18726,
                  "src": "1188:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18683,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1188:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1187:15:68"
            },
            "scope": 19321,
            "src": "1116:343:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18761,
              "nodeType": "Block",
              "src": "1787:131:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18736,
                          "name": "_role_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18728,
                          "src": "1801:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 18737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1812:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1801:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18735,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1793:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1793:21:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18740,
                  "nodeType": "ExpressionStatement",
                  "src": "1793:21:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 18746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18742,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18730,
                          "src": "1828:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307830",
                              "id": 18744,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1845:3:68",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 18743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1837:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 18745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1837:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "1828:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18741,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1820:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1820:30:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18748,
                  "nodeType": "ExpressionStatement",
                  "src": "1820:30:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18749,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "1856:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18752,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "roles_by_id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18674,
                        "src": "1856:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                          "typeString": "mapping(uint256 => bytes32)"
                        }
                      },
                      "id": 18753,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 18751,
                        "name": "_role_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18728,
                        "src": "1875:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1856:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18754,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18730,
                      "src": "1887:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1856:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18756,
                  "nodeType": "ExpressionStatement",
                  "src": "1856:36:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18757,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18733,
                      "src": "1898:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 18758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1909:4:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1898:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18760,
                  "nodeType": "ExpressionStatement",
                  "src": "1898:15:68"
                }
              ]
            },
            "documentation": "@notice Creates a new role with the given information\n@param _role_id Id of the new role\n@param _name Name of the new role\n@return {\"_success\": \"If creation of new role is successful\"}",
            "id": 18762,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_create_role",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18728,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18762,
                  "src": "1697:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18727,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1697:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18730,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18762,
                  "src": "1715:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18729,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1715:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1696:33:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18734,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18733,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 18762,
                  "src": "1770:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18732,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1770:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1769:15:68"
            },
            "scope": 19321,
            "src": "1667:251:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18776,
              "nodeType": "Block",
              "src": "2165:47:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18769,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18767,
                      "src": "2171:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18770,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "2179:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18771,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "roles_by_id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18674,
                        "src": "2179:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                          "typeString": "mapping(uint256 => bytes32)"
                        }
                      },
                      "id": 18773,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 18772,
                        "name": "_role_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18764,
                        "src": "2198:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2179:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2171:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18775,
                  "nodeType": "ExpressionStatement",
                  "src": "2171:36:68"
                }
              ]
            },
            "documentation": "@notice Returns the role's name of a role id\n@param _role_id Id of the role\n@return {\"_name\": \"Name of the role\"}",
            "id": 18777,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_role",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18764,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18777,
                  "src": "2072:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18763,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2072:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2071:18:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18767,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18777,
                  "src": "2148:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18766,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2148:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2147:15:68"
            },
            "scope": 19321,
            "src": "2053:159:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18851,
              "nodeType": "Block",
              "src": "2684:340:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18791,
                          "name": "_role_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18779,
                          "src": "2698:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 18792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2709:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2698:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18790,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2690:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2690:21:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18795,
                  "nodeType": "ExpressionStatement",
                  "src": "2690:21:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 18803,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 18798,
                              "name": "_role_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18779,
                              "src": "2735:8:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 18797,
                            "name": "read_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18777,
                            "src": "2725:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (uint256) view returns (bytes32)"
                            }
                          },
                          "id": 18799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2725:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307830",
                              "id": 18801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2756:3:68",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 18800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2748:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 18802,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2748:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "2725:35:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18796,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2717:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2717:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18805,
                  "nodeType": "ExpressionStatement",
                  "src": "2717:44:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18806,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18788,
                      "src": "2767:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "2779:21:68",
                      "subExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18807,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "2781:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18808,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "total_groups",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18678,
                        "src": "2781:19:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2767:33:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18811,
                  "nodeType": "ExpressionStatement",
                  "src": "2767:33:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18817,
                        "name": "_group_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18788,
                        "src": "2827:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18812,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "2806:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18815,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "groups",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18660,
                        "src": "2806:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Uint_$22608_storage",
                          "typeString": "struct DoublyLinkedList.Uint storage ref"
                        }
                      },
                      "id": 18816,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "append",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23331,
                      "src": "2806:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Uint_$22608_storage_ptr_$",
                        "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 18818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2806:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18819,
                  "nodeType": "ExpressionStatement",
                  "src": "2806:31:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18820,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "2843:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18823,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "2843:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 18824,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18822,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18788,
                          "src": "2863:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2843:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 18825,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "role_id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18653,
                      "src": "2843:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18826,
                      "name": "_role_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18779,
                      "src": "2884:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2843:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18828,
                  "nodeType": "ExpressionStatement",
                  "src": "2843:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18829,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "2898:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18832,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "2898:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 18833,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18831,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18788,
                          "src": "2918:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2898:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 18834,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "name",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18649,
                      "src": "2898:35:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18835,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18781,
                      "src": "2936:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2898:43:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18837,
                  "nodeType": "ExpressionStatement",
                  "src": "2898:43:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18838,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "2947:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18841,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "2947:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 18842,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18840,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18788,
                          "src": "2967:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2947:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 18843,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "document",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18651,
                      "src": "2947:39:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18844,
                      "name": "_document",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18783,
                      "src": "2989:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2947:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18846,
                  "nodeType": "ExpressionStatement",
                  "src": "2947:51:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18847,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18786,
                      "src": "3004:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 18848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3015:4:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "3004:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18850,
                  "nodeType": "ExpressionStatement",
                  "src": "3004:15:68"
                }
              ]
            },
            "documentation": "@notice Creates a new group with the given information\n@param _role_id Role id of the new group\n@param _name Name of the new group\n@param _document Document of the new group\n@return {\n\"_success\": \"If creation of the new group is successful\",\n\"_group_id: \"Id of the new group\"\n}",
            "id": 18852,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_create_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18784,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18779,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2556:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18778,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2556:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18781,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2574:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18780,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2574:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18783,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2589:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18782,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2589:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2555:52:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18786,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2648:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18785,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2648:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18788,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2663:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18787,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2663:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2647:34:68"
            },
            "scope": 19321,
            "src": "2525:499:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18923,
              "nodeType": "Block",
              "src": "3420:430:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18868,
                        "name": "_group_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18854,
                        "src": "3455:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18865,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "3430:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18866,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "groups",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18660,
                        "src": "3430:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Uint_$22608_storage",
                          "typeString": "struct DoublyLinkedList.Uint storage ref"
                        }
                      },
                      "id": 18867,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "valid_item",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23486,
                      "src": "3430:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Uint_$22608_storage_ptr_$",
                        "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) view returns (bool)"
                      }
                    },
                    "id": 18869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3430:35:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 18921,
                    "nodeType": "Block",
                    "src": "3746:100:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18905,
                            "name": "_role_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18857,
                            "src": "3754:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 18906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3765:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3754:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18908,
                        "nodeType": "ExpressionStatement",
                        "src": "3754:12:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18909,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18859,
                            "src": "3774:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "696e76616c6964",
                            "id": 18910,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3782:9:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ffd7db0f9d5cdeb49c4c9eba649d4dc6d852d64671e65488e57f58584992ac68",
                              "typeString": "literal_string \"invalid\""
                            },
                            "value": "invalid"
                          },
                          "src": "3774:17:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18912,
                        "nodeType": "ExpressionStatement",
                        "src": "3774:17:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18913,
                            "name": "_document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18861,
                            "src": "3799:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "",
                            "id": 18914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3811:2:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          },
                          "src": "3799:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18916,
                        "nodeType": "ExpressionStatement",
                        "src": "3799:14:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18917,
                            "name": "_members_count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18863,
                            "src": "3821:14:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 18918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3838:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3821:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18920,
                        "nodeType": "ExpressionStatement",
                        "src": "3821:18:68"
                      }
                    ]
                  },
                  "id": 18922,
                  "nodeType": "IfStatement",
                  "src": "3426:420:68",
                  "trueBody": {
                    "id": 18904,
                    "nodeType": "Block",
                    "src": "3467:273:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18870,
                            "name": "_role_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18857,
                            "src": "3475:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18871,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3486:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18872,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_by_id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18666,
                                "src": "3486:19:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                }
                              },
                              "id": 18874,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18873,
                                "name": "_group_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18854,
                                "src": "3506:9:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3486:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Group_$18658_storage",
                                "typeString": "struct DirectoryStorage.Group storage ref"
                              }
                            },
                            "id": 18875,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "role_id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18653,
                            "src": "3486:38:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3475:49:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18877,
                        "nodeType": "ExpressionStatement",
                        "src": "3475:49:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18878,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18859,
                            "src": "3532:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18879,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3540:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18880,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_by_id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18666,
                                "src": "3540:19:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                }
                              },
                              "id": 18882,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18881,
                                "name": "_group_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18854,
                                "src": "3560:9:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3540:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Group_$18658_storage",
                                "typeString": "struct DirectoryStorage.Group storage ref"
                              }
                            },
                            "id": 18883,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "name",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18649,
                            "src": "3540:35:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3532:43:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18885,
                        "nodeType": "ExpressionStatement",
                        "src": "3532:43:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18886,
                            "name": "_document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18861,
                            "src": "3583:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18887,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3595:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18888,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_by_id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18666,
                                "src": "3595:19:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                }
                              },
                              "id": 18890,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18889,
                                "name": "_group_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18854,
                                "src": "3615:9:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3595:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Group_$18658_storage",
                                "typeString": "struct DirectoryStorage.Group storage ref"
                              }
                            },
                            "id": 18891,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "document",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18651,
                            "src": "3595:39:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3583:51:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18893,
                        "nodeType": "ExpressionStatement",
                        "src": "3583:51:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18894,
                            "name": "_members_count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18863,
                            "src": "3642:14:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18896,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3688:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18897,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_collection",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18662,
                                "src": "3688:24:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 18899,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18854,
                                    "src": "3722:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 18898,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3714:7:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 18900,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3714:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 18895,
                              "name": "read_total_indexed_addresses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22146,
                              "src": "3659:28:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_uint256_$",
                                "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (uint256)"
                              }
                            },
                            "id": 18901,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3659:74:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3642:91:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18903,
                        "nodeType": "ExpressionStatement",
                        "src": "3642:91:68"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Returns the group's information\n@param _group_id Id of the group\n@return {\n\"_role_id\": \"Role id of the group\",\n\"_name: \"Name of the group\",\n\"_document: \"Document of the group\"\n}",
            "id": 18924,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18854,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3265:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3265:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3264:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18857,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3342:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18856,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3342:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18859,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3360:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18858,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3360:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18861,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3375:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18860,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3375:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18863,
                  "name": "_members_count",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3394:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18862,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3394:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3341:76:68"
            },
            "scope": 19321,
            "src": "3245:605:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19014,
              "nodeType": "Block",
              "src": "4271:529:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 18959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 18951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 18944,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 18935,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18681,
                                    "src": "4281:6:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$18679_storage",
                                      "typeString": "struct DirectoryStorage.System storage ref"
                                    }
                                  },
                                  "id": 18936,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "groups_by_id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 18666,
                                  "src": "4281:19:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                    "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                  }
                                },
                                "id": 18938,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 18937,
                                  "name": "_group_id",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18926,
                                  "src": "4301:9:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "4281:30:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Group_$18658_storage",
                                  "typeString": "struct DirectoryStorage.Group storage ref"
                                }
                              },
                              "id": 18939,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "members_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18657,
                              "src": "4281:49:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                              }
                            },
                            "id": 18941,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18940,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18928,
                              "src": "4331:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4281:56:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$18647_storage",
                              "typeString": "struct DirectoryStorage.User storage ref"
                            }
                          },
                          "id": 18942,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "active",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18646,
                          "src": "4281:63:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 18943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4348:5:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "4281:72:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18950,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18945,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18681,
                              "src": "4357:6:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$18679_storage",
                                "typeString": "struct DirectoryStorage.System storage ref"
                              }
                            },
                            "id": 18946,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "group_ids_by_address",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18670,
                            "src": "4357:27:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 18948,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 18947,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18928,
                            "src": "4385:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4357:34:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 18949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4395:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4357:39:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "4281:115:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 18958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18952,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18681,
                              "src": "4400:6:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$18679_storage",
                                "typeString": "struct DirectoryStorage.System storage ref"
                              }
                            },
                            "id": 18953,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "groups_by_id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18666,
                            "src": "4400:19:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                              "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                            }
                          },
                          "id": 18955,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 18954,
                            "name": "_group_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18926,
                            "src": "4420:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4400:30:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Group_$18658_storage",
                            "typeString": "struct DirectoryStorage.Group storage ref"
                          }
                        },
                        "id": 18956,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "role_id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18653,
                        "src": "4400:38:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4442:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4400:43:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4281:162:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 19012,
                    "nodeType": "Block",
                    "src": "4765:31:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19008,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18933,
                            "src": "4773:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 19009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4784:5:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "4773:16:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19011,
                        "nodeType": "ExpressionStatement",
                        "src": "4773:16:68"
                      }
                    ]
                  },
                  "id": 19013,
                  "nodeType": "IfStatement",
                  "src": "4277:519:68",
                  "trueBody": {
                    "id": 19007,
                    "nodeType": "Block",
                    "src": "4445:314:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 18960,
                                      "name": "system",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18681,
                                      "src": "4454:6:68",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_System_$18679_storage",
                                        "typeString": "struct DirectoryStorage.System storage ref"
                                      }
                                    },
                                    "id": 18963,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "groups_by_id",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18666,
                                    "src": "4454:19:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                      "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                    }
                                  },
                                  "id": 18964,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 18962,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18926,
                                    "src": "4474:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4454:30:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Group_$18658_storage",
                                    "typeString": "struct DirectoryStorage.Group storage ref"
                                  }
                                },
                                "id": 18965,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "members_by_address",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18657,
                                "src": "4454:49:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                  "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                                }
                              },
                              "id": 18967,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18966,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18928,
                                "src": "4504:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4454:56:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$18647_storage",
                                "typeString": "struct DirectoryStorage.User storage ref"
                              }
                            },
                            "id": 18968,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "active",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18646,
                            "src": "4454:63:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 18969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4520:4:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "4454:70:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 18971,
                        "nodeType": "ExpressionStatement",
                        "src": "4454:70:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18978,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18972,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "4532:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 18975,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "group_ids_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18670,
                              "src": "4532:27:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 18976,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18974,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18928,
                              "src": "4560:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4532:34:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 18977,
                            "name": "_group_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18926,
                            "src": "4569:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4532:46:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18979,
                        "nodeType": "ExpressionStatement",
                        "src": "4532:46:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 18986,
                                  "name": "_group_id",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18926,
                                  "src": "4626:9:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 18985,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4618:7:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": "bytes32"
                              },
                              "id": 18987,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4618:18:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18988,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18928,
                              "src": "4638:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18980,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "4586:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 18983,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "groups_collection",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18662,
                              "src": "4586:24:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                              }
                            },
                            "id": 18984,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24244,
                            "src": "4586:31:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_IndexedAddress_$22594_storage_ptr_$",
                              "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) returns (bool)"
                            }
                          },
                          "id": 18989,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4586:58:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 18990,
                        "nodeType": "ExpressionStatement",
                        "src": "4586:58:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 18991,
                                      "name": "system",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18681,
                                      "src": "4652:6:68",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_System_$18679_storage",
                                        "typeString": "struct DirectoryStorage.System storage ref"
                                      }
                                    },
                                    "id": 18994,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "groups_by_id",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18666,
                                    "src": "4652:19:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                      "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                    }
                                  },
                                  "id": 18995,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 18993,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18926,
                                    "src": "4672:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4652:30:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Group_$18658_storage",
                                    "typeString": "struct DirectoryStorage.Group storage ref"
                                  }
                                },
                                "id": 18996,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "members_by_address",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18657,
                                "src": "4652:49:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                  "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                                }
                              },
                              "id": 18998,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18997,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18928,
                                "src": "4702:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4652:56:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$18647_storage",
                                "typeString": "struct DirectoryStorage.User storage ref"
                              }
                            },
                            "id": 18999,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "document",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18644,
                            "src": "4652:65:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 19000,
                            "name": "_document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18930,
                            "src": "4720:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4652:77:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19002,
                        "nodeType": "ExpressionStatement",
                        "src": "4652:77:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19003,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18933,
                            "src": "4737:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 19004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4748:4:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "4737:15:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19006,
                        "nodeType": "ExpressionStatement",
                        "src": "4737:15:68"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Adds new user with the given information to a group\n@param _group_id Id of the group\n@param _user Address of the new user\n@param _document Information of the new user\n@return {\"_success\": \"If adding new user to a group is successful\"}",
            "id": 19015,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_update_add_user_to_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18926,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4161:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18925,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4161:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18928,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4180:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18927,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4180:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18930,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4195:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18929,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4195:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4160:53:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18933,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4254:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18932,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4254:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4253:15:68"
            },
            "scope": 19321,
            "src": "4118:682:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19091,
              "nodeType": "Block",
              "src": "5057:475:68",
              "statements": [
                {
                  "assignments": [
                    19023
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19023,
                      "name": "_group_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 19092,
                      "src": "5063:17:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 19022,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5063:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19028,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19024,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "5083:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 19025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "group_ids_by_address",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18670,
                      "src": "5083:27:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 19027,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 19026,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19017,
                      "src": "5111:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5083:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5063:54:68"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 19043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 19029,
                            "name": "_group_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19023,
                            "src": "5128:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 19030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5141:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "5128:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 19032,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5127:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19041,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 19037,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19023,
                                    "src": "5187:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 19036,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5179:7:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 19038,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5179:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19033,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "5148:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 19034,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_collection",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18662,
                                "src": "5148:24:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                }
                              },
                              "id": 19035,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "total",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24309,
                              "src": "5148:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_uint256_$bound_to$_t_struct$_IndexedAddress_$22594_storage_ptr_$",
                                "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (uint256)"
                              }
                            },
                            "id": 19039,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5148:50:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 19040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5202:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "5148:55:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 19042,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5147:57:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5127:77:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 19089,
                    "nodeType": "Block",
                    "src": "5243:285:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 19049,
                                      "name": "system",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18681,
                                      "src": "5251:6:68",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_System_$18679_storage",
                                        "typeString": "struct DirectoryStorage.System storage ref"
                                      }
                                    },
                                    "id": 19052,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "groups_by_id",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18666,
                                    "src": "5251:19:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                      "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                    }
                                  },
                                  "id": 19053,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 19051,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19023,
                                    "src": "5271:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5251:30:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Group_$18658_storage",
                                    "typeString": "struct DirectoryStorage.Group storage ref"
                                  }
                                },
                                "id": 19054,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "members_by_address",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18657,
                                "src": "5251:49:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                  "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                                }
                              },
                              "id": 19056,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19055,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19017,
                                "src": "5301:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5251:56:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$18647_storage",
                                "typeString": "struct DirectoryStorage.User storage ref"
                              }
                            },
                            "id": 19057,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "active",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18646,
                            "src": "5251:63:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 19058,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5317:5:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "5251:71:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19060,
                        "nodeType": "ExpressionStatement",
                        "src": "5251:71:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19061,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "5330:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 19064,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "group_ids_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18670,
                              "src": "5330:27:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 19065,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 19063,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19017,
                              "src": "5358:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5330:34:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 19066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5367:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5330:38:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19068,
                        "nodeType": "ExpressionStatement",
                        "src": "5330:38:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "5376:63:68",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19069,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18681,
                                    "src": "5383:6:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$18679_storage",
                                      "typeString": "struct DirectoryStorage.System storage ref"
                                    }
                                  },
                                  "id": 19070,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "groups_by_id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 18666,
                                  "src": "5383:19:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                    "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                  }
                                },
                                "id": 19072,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 19071,
                                  "name": "_group_id",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19023,
                                  "src": "5403:9:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5383:30:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Group_$18658_storage",
                                  "typeString": "struct DirectoryStorage.Group storage ref"
                                }
                              },
                              "id": 19073,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "members_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18657,
                              "src": "5383:49:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                              }
                            },
                            "id": 19075,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 19074,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19017,
                              "src": "5433:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5383:56:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$18647_storage",
                              "typeString": "struct DirectoryStorage.User storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19077,
                        "nodeType": "ExpressionStatement",
                        "src": "5376:63:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19078,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19020,
                            "src": "5447:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 19083,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19023,
                                    "src": "5503:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 19082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5495:7:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 19084,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5495:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 19085,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19017,
                                "src": "5515:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19079,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "5458:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 19080,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_collection",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18662,
                                "src": "5458:24:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                }
                              },
                              "id": 19081,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "remove_item",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24290,
                              "src": "5458:36:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_IndexedAddress_$22594_storage_ptr_$",
                                "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) returns (bool)"
                              }
                            },
                            "id": 19086,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5458:63:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5447:74:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19088,
                        "nodeType": "ExpressionStatement",
                        "src": "5447:74:68"
                      }
                    ]
                  },
                  "id": 19090,
                  "nodeType": "IfStatement",
                  "src": "5123:405:68",
                  "trueBody": {
                    "id": 19048,
                    "nodeType": "Block",
                    "src": "5206:31:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19044,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19020,
                            "src": "5214:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 19045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5225:5:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "5214:16:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19047,
                        "nodeType": "ExpressionStatement",
                        "src": "5214:16:68"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Removes user from its group\n@param _user Address of the user\n@return {\"_success\": \"If removing of user is successful\"}",
            "id": 19092,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_destroy_group_user",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19018,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19017,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19092,
                  "src": "4985:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19016,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4985:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4984:15:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19020,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 19092,
                  "src": "5040:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19019,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5040:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5039:15:68"
            },
            "scope": 19321,
            "src": "4948:584:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19114,
              "nodeType": "Block",
              "src": "5786:120:68",
              "statements": [
                {
                  "assignments": [
                    19100
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19100,
                      "name": "_group_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 19115,
                      "src": "5792:17:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 19099,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5792:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19105,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19101,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "5812:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 19102,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "group_ids_by_address",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18670,
                      "src": "5812:27:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 19104,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 19103,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19094,
                      "src": "5840:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5812:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5792:54:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19106,
                      "name": "_role_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19097,
                      "src": "5852:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19107,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "5863:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19108,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "5863:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 19110,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19109,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19100,
                          "src": "5883:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5863:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 19111,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "role_id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18653,
                      "src": "5863:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5852:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19113,
                  "nodeType": "ExpressionStatement",
                  "src": "5852:49:68"
                }
              ]
            },
            "documentation": "@notice Returns the role id of a user\n@param _user Address of a user\n@return {\"_role_id\": \"Role id of the user\"}",
            "id": 19115,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_role_id",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19094,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19115,
                  "src": "5693:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19093,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5693:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5692:15:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19097,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19115,
                  "src": "5766:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19096,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5766:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5765:18:68"
            },
            "scope": 19321,
            "src": "5666:240:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19152,
              "nodeType": "Block",
              "src": "6286:195:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19126,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19120,
                      "src": "6292:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19127,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "6304:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 19128,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "group_ids_by_address",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18670,
                        "src": "6304:27:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 19130,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19129,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19117,
                        "src": "6332:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6304:34:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6292:46:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19132,
                  "nodeType": "ExpressionStatement",
                  "src": "6292:46:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19133,
                      "name": "_role_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19122,
                      "src": "6344:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19134,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "6355:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19135,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "6355:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 19137,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19136,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19120,
                          "src": "6375:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6355:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 19138,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "role_id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18653,
                      "src": "6355:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6344:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19140,
                  "nodeType": "ExpressionStatement",
                  "src": "6344:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19141,
                      "name": "_document",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19124,
                      "src": "6399:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19142,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "6411:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 19143,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "groups_by_id",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18666,
                              "src": "6411:19:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                              }
                            },
                            "id": 19145,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 19144,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19120,
                              "src": "6431:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6411:30:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Group_$18658_storage",
                              "typeString": "struct DirectoryStorage.Group storage ref"
                            }
                          },
                          "id": 19146,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "members_by_address",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18657,
                          "src": "6411:49:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                            "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                          }
                        },
                        "id": 19148,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19147,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19117,
                          "src": "6461:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6411:56:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$18647_storage",
                          "typeString": "struct DirectoryStorage.User storage ref"
                        }
                      },
                      "id": 19149,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "document",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18644,
                      "src": "6411:65:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "6399:77:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19151,
                  "nodeType": "ExpressionStatement",
                  "src": "6399:77:68"
                }
              ]
            },
            "documentation": "@notice Returns the user's information\n@param _user Address of the user\n@return {\n\"_group_id\": \"Group id of the user\",\n\"_role_id\": \"Role id of the user\",\n\"_document\": \"Information of the user\"\n}",
            "id": 19153,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19117,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6155:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19116,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6155:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6154:15:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19120,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6228:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6228:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19122,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6247:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19121,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6247:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19124,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6265:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19123,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6265:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6227:56:68"
            },
            "scope": 19321,
            "src": "6136:345:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19165,
              "nodeType": "Block",
              "src": "6694:59:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19158,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19156,
                      "src": "6700:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19160,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "6734:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19161,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "6734:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        ],
                        "id": 19159,
                        "name": "read_first_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22494,
                        "src": "6712:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 19162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6712:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6700:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19164,
                  "nodeType": "ExpressionStatement",
                  "src": "6700:48:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the first group\n@return {\"_group_id\": \"Id of the first group\"}",
            "id": 19166,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_first_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19154,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6614:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19156,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19166,
                  "src": "6673:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6673:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6672:19:68"
            },
            "scope": 19321,
            "src": "6589:164:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19178,
              "nodeType": "Block",
              "src": "6963:58:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19171,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19169,
                      "src": "6969:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19173,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "7002:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19174,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "7002:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        ],
                        "id": 19172,
                        "name": "read_last_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22508,
                        "src": "6981:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 19175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6981:35:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6969:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19177,
                  "nodeType": "ExpressionStatement",
                  "src": "6969:47:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the last group\n@return {\"_group_id\": \"Id of the last group\"}",
            "id": 19179,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_last_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19167,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6883:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19169,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19179,
                  "src": "6942:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19168,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6942:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6941:19:68"
            },
            "scope": 19321,
            "src": "6859:162:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19194,
              "nodeType": "Block",
              "src": "7367:81:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19186,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19184,
                      "src": "7373:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19188,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "7410:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19189,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "7410:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19190,
                          "name": "_current_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19181,
                          "src": "7425:17:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 19187,
                        "name": "read_previous_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22542,
                        "src": "7385:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) view returns (uint256)"
                        }
                      },
                      "id": 19191,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7385:58:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7373:70:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19193,
                  "nodeType": "ExpressionStatement",
                  "src": "7373:70:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the previous group depending on the given current group\n@param _current_group_id Id of the current group\n@return {\"_group_id\": \"Id of the previous group\"}",
            "id": 19195,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_previous_group_from_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19182,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19181,
                  "name": "_current_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "7263:25:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7263:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7262:27:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19184,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "7346:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7346:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7345:19:68"
            },
            "scope": 19321,
            "src": "7223:225:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19210,
              "nodeType": "Block",
              "src": "7782:77:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19202,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19200,
                      "src": "7788:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19204,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "7821:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19205,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "7821:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19206,
                          "name": "_current_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19197,
                          "src": "7836:17:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 19203,
                        "name": "read_next_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22525,
                        "src": "7800:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) view returns (uint256)"
                        }
                      },
                      "id": 19207,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7800:54:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7788:66:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19209,
                  "nodeType": "ExpressionStatement",
                  "src": "7788:66:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the next group depending on the given current group\n@param _current_group_id Id of the current group\n@return {\"_group_id\": \"Id of the next group\"}",
            "id": 19211,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_next_group_from_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19197,
                  "name": "_current_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19211,
                  "src": "7678:25:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19196,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7678:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7677:27:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19200,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19211,
                  "src": "7761:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7761:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7760:19:68"
            },
            "scope": 19321,
            "src": "7642:217:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19223,
              "nodeType": "Block",
              "src": "8083:58:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19216,
                      "name": "_total_groups",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19214,
                      "src": "8089:13:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19218,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "8122:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19219,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "8122:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        ],
                        "id": 19217,
                        "name": "read_total_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22556,
                        "src": "8105:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 19220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8105:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8089:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19222,
                  "nodeType": "ExpressionStatement",
                  "src": "8089:47:68"
                }
              ]
            },
            "documentation": "@notice Returns the total number of groups\n@return {\"_total_groups\": \"Total number of groups\"}",
            "id": 19224,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_groups",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7999:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19215,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19214,
                  "name": "_total_groups",
                  "nodeType": "VariableDeclaration",
                  "scope": 19224,
                  "src": "8058:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8058:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8057:23:68"
            },
            "scope": 19321,
            "src": "7973:168:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19241,
              "nodeType": "Block",
              "src": "8404:98:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19231,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19229,
                      "src": "8410:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19233,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "8452:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19234,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "8452:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19236,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19226,
                              "src": "8486:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19235,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8478:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8478:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 19232,
                        "name": "read_first_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22072,
                        "src": "8418:33:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (address)"
                        }
                      },
                      "id": 19238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8418:79:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8410:87:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19240,
                  "nodeType": "ExpressionStatement",
                  "src": "8410:87:68"
                }
              ]
            },
            "documentation": "@notice Returns the first user of a group\n@param _group_id Id of the group\n@return {\"_user\": \"Address of the user\"}",
            "id": 19242,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_first_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19226,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19242,
                  "src": "8312:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19225,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8312:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8311:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19230,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19229,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19242,
                  "src": "8387:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19228,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8387:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8386:15:68"
            },
            "scope": 19321,
            "src": "8278:224:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19259,
              "nodeType": "Block",
              "src": "8763:97:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19249,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19247,
                      "src": "8769:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19251,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "8810:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19252,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "8810:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19254,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19244,
                              "src": "8844:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8836:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8836:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 19250,
                        "name": "read_last_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22089,
                        "src": "8777:32:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (address)"
                        }
                      },
                      "id": 19256,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8777:78:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8769:86:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19258,
                  "nodeType": "ExpressionStatement",
                  "src": "8769:86:68"
                }
              ]
            },
            "documentation": "@notice Returns the last user of a group\n@param _group_id Id of the group\n@return {\"_user\": \"Address of the user\"}",
            "id": 19260,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_last_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19244,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19260,
                  "src": "8671:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19243,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8671:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8670:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19247,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19260,
                  "src": "8746:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19246,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8746:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8745:15:68"
            },
            "scope": 19321,
            "src": "8638:222:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19280,
              "nodeType": "Block",
              "src": "9236:112:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19269,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19267,
                      "src": "9242:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19271,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "9283:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19272,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "9283:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19274,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19262,
                              "src": "9317:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9309:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9309:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19276,
                          "name": "_current_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19264,
                          "src": "9329:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 19270,
                        "name": "read_next_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22109,
                        "src": "9250:32:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) view returns (address)"
                        }
                      },
                      "id": 19277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9250:93:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9242:101:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19279,
                  "nodeType": "ExpressionStatement",
                  "src": "9242:101:68"
                }
              ]
            },
            "documentation": "@notice Returns the next user of a group depending on the given current user\n@param _group_id Id of the group\n@param _current_user Address of the current user\n@return {\"_user\": \"Address of the next user\"}",
            "id": 19281,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_next_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19262,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19281,
                  "src": "9121:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19261,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9121:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19264,
                  "name": "_current_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19281,
                  "src": "9140:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9140:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9120:42:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19267,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19281,
                  "src": "9219:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19266,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9219:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9218:15:68"
            },
            "scope": 19321,
            "src": "9088:260:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19301,
              "nodeType": "Block",
              "src": "9732:116:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19290,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19288,
                      "src": "9738:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19292,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "9783:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19293,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "9783:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19295,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19283,
                              "src": "9817:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19294,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9809:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9809:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19297,
                          "name": "_current_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19285,
                          "src": "9829:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 19291,
                        "name": "read_previous_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22129,
                        "src": "9746:36:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) view returns (address)"
                        }
                      },
                      "id": 19298,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9746:97:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9738:105:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19300,
                  "nodeType": "ExpressionStatement",
                  "src": "9738:105:68"
                }
              ]
            },
            "documentation": "@notice Returns the previous user of a group depending on the given current user\n@param _group_id Id of the group\n@param _current_user Address of the current user\n@return {\"_user\": \"Address of the last user\"}",
            "id": 19302,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_previous_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19286,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19283,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19302,
                  "src": "9617:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19282,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9617:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19285,
                  "name": "_current_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19302,
                  "src": "9636:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9636:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9616:42:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19288,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19302,
                  "src": "9715:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9715:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9714:15:68"
            },
            "scope": 19321,
            "src": "9580:268:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19319,
              "nodeType": "Block",
              "src": "10139:100:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19309,
                      "name": "_total_users",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19307,
                      "src": "10145:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19311,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "10189:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19312,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "10189:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19314,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19304,
                              "src": "10223:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10215:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10215:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 19310,
                        "name": "read_total_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22146,
                        "src": "10160:28:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (uint256)"
                        }
                      },
                      "id": 19316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10160:74:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10145:89:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19318,
                  "nodeType": "ExpressionStatement",
                  "src": "10145:89:68"
                }
              ]
            },
            "documentation": "@notice Returns the total number of users of a group\n@param _group_id Id of the group\n@return {\"_total_users\": \"Total number of users\"}",
            "id": 19320,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_users_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19304,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19320,
                  "src": "10040:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19303,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10040:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10039:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19307,
                  "name": "_total_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 19320,
                  "src": "10115:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19306,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10115:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10114:22:68"
            },
            "scope": 19321,
            "src": "10005:234:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 19322,
        "src": "287:9954:68"
      }
    ],
    "src": "0:10242:68"
  },
  "legacyAST": {
    "absolutePath": "@digix/cdap/contracts/storage/DirectoryStorage.sol",
    "exportedSymbols": {
      "DirectoryStorage": [
        19321
      ]
    },
    "id": 19322,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 18630,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".16"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:68"
      },
      {
        "absolutePath": "@digix/solidity-collections/contracts/abstract/IndexedAddressIteratorStorage.sol",
        "file": "@digix/solidity-collections/contracts/abstract/IndexedAddressIteratorStorage.sol",
        "id": 18631,
        "nodeType": "ImportDirective",
        "scope": 19322,
        "sourceUnit": 22148,
        "src": "26:90:68",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@digix/solidity-collections/contracts/abstract/UintIteratorStorage.sol",
        "file": "@digix/solidity-collections/contracts/abstract/UintIteratorStorage.sol",
        "id": 18632,
        "nodeType": "ImportDirective",
        "scope": 19322,
        "sourceUnit": 22558,
        "src": "117:80:68",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18633,
              "name": "IndexedAddressIteratorStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22147,
              "src": "316:29:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IndexedAddressIteratorStorage_$22147",
                "typeString": "contract IndexedAddressIteratorStorage"
              }
            },
            "id": 18634,
            "nodeType": "InheritanceSpecifier",
            "src": "316:29:68"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 18635,
              "name": "UintIteratorStorage",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22557,
              "src": "347:19:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_UintIteratorStorage_$22557",
                "typeString": "contract UintIteratorStorage"
              }
            },
            "id": 18636,
            "nodeType": "InheritanceSpecifier",
            "src": "347:19:68"
          }
        ],
        "contractDependencies": [
          22147,
          22557
        ],
        "contractKind": "contract",
        "documentation": "@title Directory Storage contains information of a directory\n@author DigixGlobal",
        "fullyImplemented": true,
        "id": 19321,
        "linearizedBaseContracts": [
          19321,
          22557,
          22147
        ],
        "name": "DirectoryStorage",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 18639,
            "libraryName": {
              "contractScope": null,
              "id": 18637,
              "name": "DoublyLinkedList",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25116,
              "src": "378:16:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DoublyLinkedList_$25116",
                "typeString": "library DoublyLinkedList"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "372:59:68",
            "typeName": {
              "contractScope": null,
              "id": 18638,
              "name": "DoublyLinkedList.IndexedAddress",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22594,
              "src": "399:31:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage_ptr",
                "typeString": "struct DoublyLinkedList.IndexedAddress"
              }
            }
          },
          {
            "id": 18642,
            "libraryName": {
              "contractScope": null,
              "id": 18640,
              "name": "DoublyLinkedList",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25116,
              "src": "440:16:68",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DoublyLinkedList_$25116",
                "typeString": "library DoublyLinkedList"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "434:49:68",
            "typeName": {
              "contractScope": null,
              "id": 18641,
              "name": "DoublyLinkedList.Uint",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22608,
              "src": "461:21:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Uint_$22608_storage_ptr",
                "typeString": "struct DoublyLinkedList.Uint"
              }
            }
          },
          {
            "canonicalName": "DirectoryStorage.User",
            "id": 18647,
            "members": [
              {
                "constant": false,
                "id": 18644,
                "name": "document",
                "nodeType": "VariableDeclaration",
                "scope": 18647,
                "src": "505:16:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 18643,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "505:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18646,
                "name": "active",
                "nodeType": "VariableDeclaration",
                "scope": 18647,
                "src": "527:11:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 18645,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "527:4:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "User",
            "nodeType": "StructDefinition",
            "scope": 19321,
            "src": "487:56:68",
            "visibility": "public"
          },
          {
            "canonicalName": "DirectoryStorage.Group",
            "id": 18658,
            "members": [
              {
                "constant": false,
                "id": 18649,
                "name": "name",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "566:12:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 18648,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "566:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18651,
                "name": "document",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "584:16:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 18650,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "584:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18653,
                "name": "role_id",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "606:15:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 18652,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "606:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18657,
                "name": "members_by_address",
                "nodeType": "VariableDeclaration",
                "scope": 18658,
                "src": "627:43:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                  "typeString": "mapping(address => struct DirectoryStorage.User)"
                },
                "typeName": {
                  "id": 18656,
                  "keyType": {
                    "id": 18654,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "635:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "627:24:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                    "typeString": "mapping(address => struct DirectoryStorage.User)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 18655,
                    "name": "User",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18647,
                    "src": "646:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_User_$18647_storage_ptr",
                      "typeString": "struct DirectoryStorage.User"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Group",
            "nodeType": "StructDefinition",
            "scope": 19321,
            "src": "547:128:68",
            "visibility": "public"
          },
          {
            "canonicalName": "DirectoryStorage.System",
            "id": 18679,
            "members": [
              {
                "constant": false,
                "id": 18660,
                "name": "groups",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "699:28:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Uint_$22608_storage_ptr",
                  "typeString": "struct DoublyLinkedList.Uint"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 18659,
                  "name": "DoublyLinkedList.Uint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 22608,
                  "src": "699:21:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Uint_$22608_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Uint"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18662,
                "name": "groups_collection",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "733:49:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage_ptr",
                  "typeString": "struct DoublyLinkedList.IndexedAddress"
                },
                "typeName": {
                  "contractScope": null,
                  "id": 18661,
                  "name": "DoublyLinkedList.IndexedAddress",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 22594,
                  "src": "733:31:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage_ptr",
                    "typeString": "struct DoublyLinkedList.IndexedAddress"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18666,
                "name": "groups_by_id",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "788:39:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group)"
                },
                "typeName": {
                  "id": 18665,
                  "keyType": {
                    "id": 18663,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "797:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "788:26:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                    "typeString": "mapping(uint256 => struct DirectoryStorage.Group)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 18664,
                    "name": "Group",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 18658,
                    "src": "808:5:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Group_$18658_storage_ptr",
                      "typeString": "struct DirectoryStorage.Group"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18670,
                "name": "group_ids_by_address",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "833:49:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "typeName": {
                  "id": 18669,
                  "keyType": {
                    "id": 18667,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "842:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "833:28:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                    "typeString": "mapping(address => uint256)"
                  },
                  "valueType": {
                    "id": 18668,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "853:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18674,
                "name": "roles_by_id",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "888:40:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                  "typeString": "mapping(uint256 => bytes32)"
                },
                "typeName": {
                  "id": 18673,
                  "keyType": {
                    "id": 18671,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "888:28:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                    "typeString": "mapping(uint256 => bytes32)"
                  },
                  "valueType": {
                    "id": 18672,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "908:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18676,
                "name": "initialized",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "934:16:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 18675,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "934:4:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 18678,
                "name": "total_groups",
                "nodeType": "VariableDeclaration",
                "scope": 18679,
                "src": "956:20:68",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 18677,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "956:7:68",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "System",
            "nodeType": "StructDefinition",
            "scope": 19321,
            "src": "679:302:68",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 18681,
            "name": "system",
            "nodeType": "VariableDeclaration",
            "scope": 19321,
            "src": "985:13:68",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_System_$18679_storage",
              "typeString": "struct DirectoryStorage.System"
            },
            "typeName": {
              "contractScope": null,
              "id": 18680,
              "name": "System",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 18679,
              "src": "985:6:68",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_System_$18679_storage_ptr",
                "typeString": "struct DirectoryStorage.System"
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18725,
              "nodeType": "Block",
              "src": "1205:254:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 18690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18687,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "1219:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18688,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "initialized",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18676,
                          "src": "1219:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 18689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1241:5:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "1219:27:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18686,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1211:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1211:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18692,
                  "nodeType": "ExpressionStatement",
                  "src": "1211:36:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18693,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "1253:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 18695,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "total_groups",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18678,
                      "src": "1253:19:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 18696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1275:1:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1253:23:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18698,
                  "nodeType": "ExpressionStatement",
                  "src": "1253:23:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 18699,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "1282:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 18701,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "initialized",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18676,
                      "src": "1282:18:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 18702,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1303:4:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1282:25:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18704,
                  "nodeType": "ExpressionStatement",
                  "src": "1282:25:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1334:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726f6f74",
                        "id": 18707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1337:6:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        },
                        "value": "root"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        }
                      ],
                      "id": 18705,
                      "name": "internal_create_role",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18762,
                      "src": "1313:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$returns$_t_bool_$",
                        "typeString": "function (uint256,bytes32) returns (bool)"
                      }
                    },
                    "id": 18708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1313:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18709,
                  "nodeType": "ExpressionStatement",
                  "src": "1313:31:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 18711,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1372:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "726f6f74",
                        "id": 18712,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1375:6:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        },
                        "value": "root"
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "",
                        "id": 18713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1383:2:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d6c66cad06fe14fdb6ce9297d80d32f24d7428996d0045cbf90cc345c677ba16",
                          "typeString": "literal_string \"root\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 18710,
                      "name": "internal_create_group",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18852,
                      "src": "1350:21:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$_t_uint256_$",
                        "typeString": "function (uint256,bytes32,bytes32) returns (bool,uint256)"
                      }
                    },
                    "id": 18714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1350:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                      "typeString": "tuple(bool,uint256)"
                    }
                  },
                  "id": 18715,
                  "nodeType": "ExpressionStatement",
                  "src": "1350:36:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18716,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18684,
                      "src": "1392:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 18718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1437:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18719,
                            "name": "tx",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 26194,
                            "src": "1440:2:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_transaction",
                              "typeString": "tx"
                            }
                          },
                          "id": 18720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "origin",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1440:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "",
                          "id": 18721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "string",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1451:2:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          },
                          "value": ""
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                            "typeString": "literal_string \"\""
                          }
                        ],
                        "id": 18717,
                        "name": "internal_update_add_user_to_group",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19015,
                        "src": "1403:33:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (uint256,address,bytes32) returns (bool)"
                        }
                      },
                      "id": 18722,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1403:51:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "1392:62:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18724,
                  "nodeType": "ExpressionStatement",
                  "src": "1392:62:68"
                }
              ]
            },
            "documentation": "@notice Initializes directory settings\n@return _success If directory initialization is successful",
            "id": 18726,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "initialize_directory",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18682,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1145:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18685,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18684,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 18726,
                  "src": "1188:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18683,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1188:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1187:15:68"
            },
            "scope": 19321,
            "src": "1116:343:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18761,
              "nodeType": "Block",
              "src": "1787:131:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18738,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18736,
                          "name": "_role_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18728,
                          "src": "1801:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 18737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1812:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1801:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18735,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1793:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18739,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1793:21:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18740,
                  "nodeType": "ExpressionStatement",
                  "src": "1793:21:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 18746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18742,
                          "name": "_name",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18730,
                          "src": "1828:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307830",
                              "id": 18744,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1845:3:68",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 18743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1837:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 18745,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1837:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "1828:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18741,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "1820:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1820:30:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18748,
                  "nodeType": "ExpressionStatement",
                  "src": "1820:30:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18749,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "1856:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18752,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "roles_by_id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18674,
                        "src": "1856:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                          "typeString": "mapping(uint256 => bytes32)"
                        }
                      },
                      "id": 18753,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 18751,
                        "name": "_role_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18728,
                        "src": "1875:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1856:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18754,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18730,
                      "src": "1887:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1856:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18756,
                  "nodeType": "ExpressionStatement",
                  "src": "1856:36:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18757,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18733,
                      "src": "1898:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 18758,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1909:4:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1898:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18760,
                  "nodeType": "ExpressionStatement",
                  "src": "1898:15:68"
                }
              ]
            },
            "documentation": "@notice Creates a new role with the given information\n@param _role_id Id of the new role\n@param _name Name of the new role\n@return {\"_success\": \"If creation of new role is successful\"}",
            "id": 18762,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_create_role",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18731,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18728,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18762,
                  "src": "1697:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18727,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1697:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18730,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18762,
                  "src": "1715:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18729,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1715:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1696:33:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18734,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18733,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 18762,
                  "src": "1770:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18732,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1770:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1769:15:68"
            },
            "scope": 19321,
            "src": "1667:251:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18776,
              "nodeType": "Block",
              "src": "2165:47:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18769,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18767,
                      "src": "2171:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18770,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "2179:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18771,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "roles_by_id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18674,
                        "src": "2179:18:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                          "typeString": "mapping(uint256 => bytes32)"
                        }
                      },
                      "id": 18773,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 18772,
                        "name": "_role_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18764,
                        "src": "2198:8:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "2179:28:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2171:36:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18775,
                  "nodeType": "ExpressionStatement",
                  "src": "2171:36:68"
                }
              ]
            },
            "documentation": "@notice Returns the role's name of a role id\n@param _role_id Id of the role\n@return {\"_name\": \"Name of the role\"}",
            "id": 18777,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_role",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18765,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18764,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18777,
                  "src": "2072:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18763,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2072:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2071:18:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18768,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18767,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18777,
                  "src": "2148:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18766,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2148:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2147:15:68"
            },
            "scope": 19321,
            "src": "2053:159:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 18851,
              "nodeType": "Block",
              "src": "2684:340:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 18791,
                          "name": "_role_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18779,
                          "src": "2698:8:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 18792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2709:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2698:12:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18790,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2690:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2690:21:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18795,
                  "nodeType": "ExpressionStatement",
                  "src": "2690:21:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 18803,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 18798,
                              "name": "_role_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18779,
                              "src": "2735:8:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 18797,
                            "name": "read_role",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18777,
                            "src": "2725:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bytes32_$",
                              "typeString": "function (uint256) view returns (bytes32)"
                            }
                          },
                          "id": 18799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2725:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "307830",
                              "id": 18801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2756:3:68",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0x0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 18800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2748:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 18802,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2748:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "2725:35:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 18796,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        26185,
                        26186
                      ],
                      "referencedDeclaration": 26185,
                      "src": "2717:7:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 18804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2717:44:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 18805,
                  "nodeType": "ExpressionStatement",
                  "src": "2717:44:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18810,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18806,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18788,
                      "src": "2767:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": true,
                      "src": "2779:21:68",
                      "subExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18807,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "2781:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18808,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": true,
                        "memberName": "total_groups",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18678,
                        "src": "2781:19:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2767:33:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18811,
                  "nodeType": "ExpressionStatement",
                  "src": "2767:33:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18817,
                        "name": "_group_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18788,
                        "src": "2827:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18812,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "2806:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18815,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "groups",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18660,
                        "src": "2806:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Uint_$22608_storage",
                          "typeString": "struct DoublyLinkedList.Uint storage ref"
                        }
                      },
                      "id": 18816,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "append",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23331,
                      "src": "2806:20:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Uint_$22608_storage_ptr_$",
                        "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 18818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2806:31:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18819,
                  "nodeType": "ExpressionStatement",
                  "src": "2806:31:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18820,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "2843:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18823,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "2843:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 18824,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18822,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18788,
                          "src": "2863:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2843:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 18825,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "role_id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18653,
                      "src": "2843:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18826,
                      "name": "_role_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18779,
                      "src": "2884:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2843:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 18828,
                  "nodeType": "ExpressionStatement",
                  "src": "2843:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18829,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "2898:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18832,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "2898:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 18833,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18831,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18788,
                          "src": "2918:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2898:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 18834,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "name",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18649,
                      "src": "2898:35:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18835,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18781,
                      "src": "2936:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2898:43:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18837,
                  "nodeType": "ExpressionStatement",
                  "src": "2898:43:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 18838,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "2947:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 18841,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "2947:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 18842,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 18840,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18788,
                          "src": "2967:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2947:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 18843,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "document",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18651,
                      "src": "2947:39:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 18844,
                      "name": "_document",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18783,
                      "src": "2989:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "2947:51:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 18846,
                  "nodeType": "ExpressionStatement",
                  "src": "2947:51:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 18849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 18847,
                      "name": "_success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 18786,
                      "src": "3004:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 18848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3015:4:68",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "3004:15:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 18850,
                  "nodeType": "ExpressionStatement",
                  "src": "3004:15:68"
                }
              ]
            },
            "documentation": "@notice Creates a new group with the given information\n@param _role_id Role id of the new group\n@param _name Name of the new group\n@param _document Document of the new group\n@return {\n\"_success\": \"If creation of the new group is successful\",\n\"_group_id: \"Id of the new group\"\n}",
            "id": 18852,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_create_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18784,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18779,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2556:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18778,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2556:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18781,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2574:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18780,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2574:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18783,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2589:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18782,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2589:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2555:52:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18789,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18786,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2648:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18785,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2648:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18788,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18852,
                  "src": "2663:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18787,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2663:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2647:34:68"
            },
            "scope": 19321,
            "src": "2525:499:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 18923,
              "nodeType": "Block",
              "src": "3420:430:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 18868,
                        "name": "_group_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18854,
                        "src": "3455:9:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 18865,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "3430:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 18866,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "groups",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18660,
                        "src": "3430:13:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Uint_$22608_storage",
                          "typeString": "struct DoublyLinkedList.Uint storage ref"
                        }
                      },
                      "id": 18867,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "valid_item",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23486,
                      "src": "3430:24:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_Uint_$22608_storage_ptr_$",
                        "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) view returns (bool)"
                      }
                    },
                    "id": 18869,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3430:35:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 18921,
                    "nodeType": "Block",
                    "src": "3746:100:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18905,
                            "name": "_role_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18857,
                            "src": "3754:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 18906,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3765:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3754:12:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18908,
                        "nodeType": "ExpressionStatement",
                        "src": "3754:12:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18909,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18859,
                            "src": "3774:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "696e76616c6964",
                            "id": 18910,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3782:9:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ffd7db0f9d5cdeb49c4c9eba649d4dc6d852d64671e65488e57f58584992ac68",
                              "typeString": "literal_string \"invalid\""
                            },
                            "value": "invalid"
                          },
                          "src": "3774:17:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18912,
                        "nodeType": "ExpressionStatement",
                        "src": "3774:17:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18913,
                            "name": "_document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18861,
                            "src": "3799:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "",
                            "id": 18914,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3811:2:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                              "typeString": "literal_string \"\""
                            },
                            "value": ""
                          },
                          "src": "3799:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18916,
                        "nodeType": "ExpressionStatement",
                        "src": "3799:14:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18917,
                            "name": "_members_count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18863,
                            "src": "3821:14:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 18918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3838:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3821:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18920,
                        "nodeType": "ExpressionStatement",
                        "src": "3821:18:68"
                      }
                    ]
                  },
                  "id": 18922,
                  "nodeType": "IfStatement",
                  "src": "3426:420:68",
                  "trueBody": {
                    "id": 18904,
                    "nodeType": "Block",
                    "src": "3467:273:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18876,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18870,
                            "name": "_role_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18857,
                            "src": "3475:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18871,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3486:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18872,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_by_id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18666,
                                "src": "3486:19:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                }
                              },
                              "id": 18874,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18873,
                                "name": "_group_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18854,
                                "src": "3506:9:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3486:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Group_$18658_storage",
                                "typeString": "struct DirectoryStorage.Group storage ref"
                              }
                            },
                            "id": 18875,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "role_id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18653,
                            "src": "3486:38:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3475:49:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18877,
                        "nodeType": "ExpressionStatement",
                        "src": "3475:49:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18878,
                            "name": "_name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18859,
                            "src": "3532:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18879,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3540:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18880,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_by_id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18666,
                                "src": "3540:19:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                }
                              },
                              "id": 18882,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18881,
                                "name": "_group_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18854,
                                "src": "3560:9:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3540:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Group_$18658_storage",
                                "typeString": "struct DirectoryStorage.Group storage ref"
                              }
                            },
                            "id": 18883,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "name",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18649,
                            "src": "3540:35:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3532:43:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18885,
                        "nodeType": "ExpressionStatement",
                        "src": "3532:43:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18892,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18886,
                            "name": "_document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18861,
                            "src": "3583:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18887,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3595:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18888,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_by_id",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18666,
                                "src": "3595:19:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                  "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                }
                              },
                              "id": 18890,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18889,
                                "name": "_group_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18854,
                                "src": "3615:9:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3595:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Group_$18658_storage",
                                "typeString": "struct DirectoryStorage.Group storage ref"
                              }
                            },
                            "id": 18891,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "document",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18651,
                            "src": "3595:39:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3583:51:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 18893,
                        "nodeType": "ExpressionStatement",
                        "src": "3583:51:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 18894,
                            "name": "_members_count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18863,
                            "src": "3642:14:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 18896,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "3688:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 18897,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_collection",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18662,
                                "src": "3688:24:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 18899,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18854,
                                    "src": "3722:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 18898,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3714:7:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 18900,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3714:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 18895,
                              "name": "read_total_indexed_addresses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22146,
                              "src": "3659:28:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_uint256_$",
                                "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (uint256)"
                              }
                            },
                            "id": 18901,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3659:74:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3642:91:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18903,
                        "nodeType": "ExpressionStatement",
                        "src": "3642:91:68"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Returns the group's information\n@param _group_id Id of the group\n@return {\n\"_role_id\": \"Role id of the group\",\n\"_name: \"Name of the group\",\n\"_document: \"Document of the group\"\n}",
            "id": 18924,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18854,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3265:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3265:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3264:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18857,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3342:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18856,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3342:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18859,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3360:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18858,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3360:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18861,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3375:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18860,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3375:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18863,
                  "name": "_members_count",
                  "nodeType": "VariableDeclaration",
                  "scope": 18924,
                  "src": "3394:22:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18862,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3394:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3341:76:68"
            },
            "scope": 19321,
            "src": "3245:605:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19014,
              "nodeType": "Block",
              "src": "4271:529:68",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 18959,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 18951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 18944,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 18935,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18681,
                                    "src": "4281:6:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$18679_storage",
                                      "typeString": "struct DirectoryStorage.System storage ref"
                                    }
                                  },
                                  "id": 18936,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "groups_by_id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 18666,
                                  "src": "4281:19:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                    "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                  }
                                },
                                "id": 18938,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 18937,
                                  "name": "_group_id",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18926,
                                  "src": "4301:9:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "4281:30:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Group_$18658_storage",
                                  "typeString": "struct DirectoryStorage.Group storage ref"
                                }
                              },
                              "id": 18939,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "members_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18657,
                              "src": "4281:49:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                              }
                            },
                            "id": 18941,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18940,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18928,
                              "src": "4331:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4281:56:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$18647_storage",
                              "typeString": "struct DirectoryStorage.User storage ref"
                            }
                          },
                          "id": 18942,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "active",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18646,
                          "src": "4281:63:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 18943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4348:5:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "src": "4281:72:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 18950,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18945,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18681,
                              "src": "4357:6:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$18679_storage",
                                "typeString": "struct DirectoryStorage.System storage ref"
                              }
                            },
                            "id": 18946,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "group_ids_by_address",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18670,
                            "src": "4357:27:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 18948,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 18947,
                            "name": "_user",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18928,
                            "src": "4385:5:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4357:34:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 18949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4395:1:68",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4357:39:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "4281:115:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 18958,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 18952,
                              "name": "system",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18681,
                              "src": "4400:6:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_System_$18679_storage",
                                "typeString": "struct DirectoryStorage.System storage ref"
                              }
                            },
                            "id": 18953,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "groups_by_id",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18666,
                            "src": "4400:19:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                              "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                            }
                          },
                          "id": 18955,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 18954,
                            "name": "_group_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18926,
                            "src": "4420:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4400:30:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Group_$18658_storage",
                            "typeString": "struct DirectoryStorage.Group storage ref"
                          }
                        },
                        "id": 18956,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "role_id",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18653,
                        "src": "4400:38:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 18957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4442:1:68",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "4400:43:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4281:162:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 19012,
                    "nodeType": "Block",
                    "src": "4765:31:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19008,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18933,
                            "src": "4773:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 19009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4784:5:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "4773:16:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19011,
                        "nodeType": "ExpressionStatement",
                        "src": "4773:16:68"
                      }
                    ]
                  },
                  "id": 19013,
                  "nodeType": "IfStatement",
                  "src": "4277:519:68",
                  "trueBody": {
                    "id": 19007,
                    "nodeType": "Block",
                    "src": "4445:314:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18970,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 18960,
                                      "name": "system",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18681,
                                      "src": "4454:6:68",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_System_$18679_storage",
                                        "typeString": "struct DirectoryStorage.System storage ref"
                                      }
                                    },
                                    "id": 18963,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "groups_by_id",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18666,
                                    "src": "4454:19:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                      "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                    }
                                  },
                                  "id": 18964,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 18962,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18926,
                                    "src": "4474:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4454:30:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Group_$18658_storage",
                                    "typeString": "struct DirectoryStorage.Group storage ref"
                                  }
                                },
                                "id": 18965,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "members_by_address",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18657,
                                "src": "4454:49:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                  "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                                }
                              },
                              "id": 18967,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18966,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18928,
                                "src": "4504:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4454:56:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$18647_storage",
                                "typeString": "struct DirectoryStorage.User storage ref"
                              }
                            },
                            "id": 18968,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "active",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18646,
                            "src": "4454:63:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 18969,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4520:4:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "4454:70:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 18971,
                        "nodeType": "ExpressionStatement",
                        "src": "4454:70:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 18978,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18972,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "4532:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 18975,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "group_ids_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18670,
                              "src": "4532:27:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 18976,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 18974,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18928,
                              "src": "4560:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4532:34:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 18977,
                            "name": "_group_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18926,
                            "src": "4569:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4532:46:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 18979,
                        "nodeType": "ExpressionStatement",
                        "src": "4532:46:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 18986,
                                  "name": "_group_id",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18926,
                                  "src": "4626:9:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 18985,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4618:7:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": "bytes32"
                              },
                              "id": 18987,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4618:18:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 18988,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 18928,
                              "src": "4638:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 18980,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "4586:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 18983,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "groups_collection",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18662,
                              "src": "4586:24:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                              }
                            },
                            "id": 18984,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "append",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24244,
                            "src": "4586:31:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_IndexedAddress_$22594_storage_ptr_$",
                              "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) returns (bool)"
                            }
                          },
                          "id": 18989,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4586:58:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 18990,
                        "nodeType": "ExpressionStatement",
                        "src": "4586:58:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 18991,
                                      "name": "system",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18681,
                                      "src": "4652:6:68",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_System_$18679_storage",
                                        "typeString": "struct DirectoryStorage.System storage ref"
                                      }
                                    },
                                    "id": 18994,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "groups_by_id",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18666,
                                    "src": "4652:19:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                      "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                    }
                                  },
                                  "id": 18995,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 18993,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18926,
                                    "src": "4672:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "4652:30:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Group_$18658_storage",
                                    "typeString": "struct DirectoryStorage.Group storage ref"
                                  }
                                },
                                "id": 18996,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "members_by_address",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18657,
                                "src": "4652:49:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                  "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                                }
                              },
                              "id": 18998,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 18997,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18928,
                                "src": "4702:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "4652:56:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$18647_storage",
                                "typeString": "struct DirectoryStorage.User storage ref"
                              }
                            },
                            "id": 18999,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "document",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18644,
                            "src": "4652:65:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 19000,
                            "name": "_document",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18930,
                            "src": "4720:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4652:77:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 19002,
                        "nodeType": "ExpressionStatement",
                        "src": "4652:77:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19003,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18933,
                            "src": "4737:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 19004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4748:4:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "4737:15:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19006,
                        "nodeType": "ExpressionStatement",
                        "src": "4737:15:68"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Adds new user with the given information to a group\n@param _group_id Id of the group\n@param _user Address of the new user\n@param _document Information of the new user\n@return {\"_success\": \"If adding new user to a group is successful\"}",
            "id": 19015,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_update_add_user_to_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 18931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18926,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4161:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 18925,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4161:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18928,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4180:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 18927,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4180:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 18930,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4195:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 18929,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4195:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4160:53:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 18934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 18933,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 19015,
                  "src": "4254:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 18932,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4254:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4253:15:68"
            },
            "scope": 19321,
            "src": "4118:682:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19091,
              "nodeType": "Block",
              "src": "5057:475:68",
              "statements": [
                {
                  "assignments": [
                    19023
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19023,
                      "name": "_group_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 19092,
                      "src": "5063:17:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 19022,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5063:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19028,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19024,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "5083:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 19025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "group_ids_by_address",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18670,
                      "src": "5083:27:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 19027,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 19026,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19017,
                      "src": "5111:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5083:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5063:54:68"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 19043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19031,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 19029,
                            "name": "_group_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19023,
                            "src": "5128:9:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 19030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5141:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "5128:14:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 19032,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5127:16:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 19041,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 19037,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19023,
                                    "src": "5187:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 19036,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5179:7:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 19038,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5179:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19033,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "5148:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 19034,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_collection",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18662,
                                "src": "5148:24:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                }
                              },
                              "id": 19035,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "total",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24309,
                              "src": "5148:30:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_uint256_$bound_to$_t_struct$_IndexedAddress_$22594_storage_ptr_$",
                                "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (uint256)"
                              }
                            },
                            "id": 19039,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5148:50:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 19040,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5202:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "5148:55:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 19042,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5147:57:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5127:77:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 19089,
                    "nodeType": "Block",
                    "src": "5243:285:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 19049,
                                      "name": "system",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18681,
                                      "src": "5251:6:68",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_System_$18679_storage",
                                        "typeString": "struct DirectoryStorage.System storage ref"
                                      }
                                    },
                                    "id": 19052,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "groups_by_id",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18666,
                                    "src": "5251:19:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                      "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                    }
                                  },
                                  "id": 19053,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 19051,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19023,
                                    "src": "5271:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5251:30:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Group_$18658_storage",
                                    "typeString": "struct DirectoryStorage.Group storage ref"
                                  }
                                },
                                "id": 19054,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "members_by_address",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18657,
                                "src": "5251:49:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                  "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                                }
                              },
                              "id": 19056,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 19055,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19017,
                                "src": "5301:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5251:56:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_User_$18647_storage",
                                "typeString": "struct DirectoryStorage.User storage ref"
                              }
                            },
                            "id": 19057,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "active",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 18646,
                            "src": "5251:63:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 19058,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5317:5:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "5251:71:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19060,
                        "nodeType": "ExpressionStatement",
                        "src": "5251:71:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19067,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19061,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "5330:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 19064,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "group_ids_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18670,
                              "src": "5330:27:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 19065,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 19063,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19017,
                              "src": "5358:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5330:34:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 19066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5367:1:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5330:38:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 19068,
                        "nodeType": "ExpressionStatement",
                        "src": "5330:38:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19076,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "5376:63:68",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 19069,
                                    "name": "system",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 18681,
                                    "src": "5383:6:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_System_$18679_storage",
                                      "typeString": "struct DirectoryStorage.System storage ref"
                                    }
                                  },
                                  "id": 19070,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "groups_by_id",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 18666,
                                  "src": "5383:19:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                    "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                                  }
                                },
                                "id": 19072,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 19071,
                                  "name": "_group_id",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 19023,
                                  "src": "5403:9:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5383:30:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Group_$18658_storage",
                                  "typeString": "struct DirectoryStorage.Group storage ref"
                                }
                              },
                              "id": 19073,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "members_by_address",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18657,
                              "src": "5383:49:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                                "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                              }
                            },
                            "id": 19075,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 19074,
                              "name": "_user",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19017,
                              "src": "5433:5:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5383:56:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_User_$18647_storage",
                              "typeString": "struct DirectoryStorage.User storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 19077,
                        "nodeType": "ExpressionStatement",
                        "src": "5376:63:68"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19078,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19020,
                            "src": "5447:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 19083,
                                    "name": "_group_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 19023,
                                    "src": "5503:9:68",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 19082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5495:7:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": "bytes32"
                                },
                                "id": 19084,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5495:18:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "id": 19085,
                                "name": "_user",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 19017,
                                "src": "5515:5:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 19079,
                                  "name": "system",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 18681,
                                  "src": "5458:6:68",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_System_$18679_storage",
                                    "typeString": "struct DirectoryStorage.System storage ref"
                                  }
                                },
                                "id": 19080,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "groups_collection",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 18662,
                                "src": "5458:24:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                                  "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                                }
                              },
                              "id": 19081,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "remove_item",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 24290,
                              "src": "5458:36:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_delegatecall_nonpayable$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_IndexedAddress_$22594_storage_ptr_$",
                                "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) returns (bool)"
                              }
                            },
                            "id": 19086,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5458:63:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5447:74:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19088,
                        "nodeType": "ExpressionStatement",
                        "src": "5447:74:68"
                      }
                    ]
                  },
                  "id": 19090,
                  "nodeType": "IfStatement",
                  "src": "5123:405:68",
                  "trueBody": {
                    "id": 19048,
                    "nodeType": "Block",
                    "src": "5206:31:68",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 19046,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 19044,
                            "name": "_success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19020,
                            "src": "5214:8:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 19045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5225:5:68",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "5214:16:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 19047,
                        "nodeType": "ExpressionStatement",
                        "src": "5214:16:68"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Removes user from its group\n@param _user Address of the user\n@return {\"_success\": \"If removing of user is successful\"}",
            "id": 19092,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "internal_destroy_group_user",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19018,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19017,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19092,
                  "src": "4985:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19016,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4985:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4984:15:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19020,
                  "name": "_success",
                  "nodeType": "VariableDeclaration",
                  "scope": 19092,
                  "src": "5040:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 19019,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5040:4:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5039:15:68"
            },
            "scope": 19321,
            "src": "4948:584:68",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 19114,
              "nodeType": "Block",
              "src": "5786:120:68",
              "statements": [
                {
                  "assignments": [
                    19100
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 19100,
                      "name": "_group_id",
                      "nodeType": "VariableDeclaration",
                      "scope": 19115,
                      "src": "5792:17:68",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 19099,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5792:7:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 19105,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 19101,
                        "name": "system",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 18681,
                        "src": "5812:6:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_System_$18679_storage",
                          "typeString": "struct DirectoryStorage.System storage ref"
                        }
                      },
                      "id": 19102,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "group_ids_by_address",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18670,
                      "src": "5812:27:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 19104,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 19103,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19094,
                      "src": "5840:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5812:34:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5792:54:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19112,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19106,
                      "name": "_role_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19097,
                      "src": "5852:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19107,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "5863:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19108,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "5863:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 19110,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19109,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19100,
                          "src": "5883:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5863:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 19111,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "role_id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18653,
                      "src": "5863:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5852:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19113,
                  "nodeType": "ExpressionStatement",
                  "src": "5852:49:68"
                }
              ]
            },
            "documentation": "@notice Returns the role id of a user\n@param _user Address of a user\n@return {\"_role_id\": \"Role id of the user\"}",
            "id": 19115,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user_role_id",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19094,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19115,
                  "src": "5693:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19093,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5693:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5692:15:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19097,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19115,
                  "src": "5766:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19096,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5766:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5765:18:68"
            },
            "scope": 19321,
            "src": "5666:240:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19152,
              "nodeType": "Block",
              "src": "6286:195:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19126,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19120,
                      "src": "6292:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 19127,
                          "name": "system",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 18681,
                          "src": "6304:6:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_System_$18679_storage",
                            "typeString": "struct DirectoryStorage.System storage ref"
                          }
                        },
                        "id": 19128,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "group_ids_by_address",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 18670,
                        "src": "6304:27:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 19130,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 19129,
                        "name": "_user",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19117,
                        "src": "6332:5:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "6304:34:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6292:46:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19132,
                  "nodeType": "ExpressionStatement",
                  "src": "6292:46:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19139,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19133,
                      "name": "_role_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19122,
                      "src": "6344:8:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19134,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "6355:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19135,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_by_id",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18666,
                          "src": "6355:19:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                            "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                          }
                        },
                        "id": 19137,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19136,
                          "name": "_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19120,
                          "src": "6375:9:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6355:30:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Group_$18658_storage",
                          "typeString": "struct DirectoryStorage.Group storage ref"
                        }
                      },
                      "id": 19138,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "role_id",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18653,
                      "src": "6355:38:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6344:49:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19140,
                  "nodeType": "ExpressionStatement",
                  "src": "6344:49:68"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19141,
                      "name": "_document",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19124,
                      "src": "6399:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 19142,
                                "name": "system",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 18681,
                                "src": "6411:6:68",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_System_$18679_storage",
                                  "typeString": "struct DirectoryStorage.System storage ref"
                                }
                              },
                              "id": 19143,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "groups_by_id",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 18666,
                              "src": "6411:19:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Group_$18658_storage_$",
                                "typeString": "mapping(uint256 => struct DirectoryStorage.Group storage ref)"
                              }
                            },
                            "id": 19145,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 19144,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19120,
                              "src": "6431:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6411:30:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Group_$18658_storage",
                              "typeString": "struct DirectoryStorage.Group storage ref"
                            }
                          },
                          "id": 19146,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "members_by_address",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18657,
                          "src": "6411:49:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_User_$18647_storage_$",
                            "typeString": "mapping(address => struct DirectoryStorage.User storage ref)"
                          }
                        },
                        "id": 19148,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 19147,
                          "name": "_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19117,
                          "src": "6461:5:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6411:56:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_User_$18647_storage",
                          "typeString": "struct DirectoryStorage.User storage ref"
                        }
                      },
                      "id": 19149,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "document",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 18644,
                      "src": "6411:65:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "6399:77:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 19151,
                  "nodeType": "ExpressionStatement",
                  "src": "6399:77:68"
                }
              ]
            },
            "documentation": "@notice Returns the user's information\n@param _user Address of the user\n@return {\n\"_group_id\": \"Group id of the user\",\n\"_role_id\": \"Role id of the user\",\n\"_document\": \"Information of the user\"\n}",
            "id": 19153,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_user",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19118,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19117,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6155:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19116,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6155:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6154:15:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19120,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6228:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19119,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6228:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19122,
                  "name": "_role_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6247:16:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19121,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6247:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19124,
                  "name": "_document",
                  "nodeType": "VariableDeclaration",
                  "scope": 19153,
                  "src": "6265:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19123,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6265:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6227:56:68"
            },
            "scope": 19321,
            "src": "6136:345:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 19165,
              "nodeType": "Block",
              "src": "6694:59:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19158,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19156,
                      "src": "6700:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19160,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "6734:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19161,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "6734:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        ],
                        "id": 19159,
                        "name": "read_first_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22494,
                        "src": "6712:21:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 19162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6712:36:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6700:48:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19164,
                  "nodeType": "ExpressionStatement",
                  "src": "6700:48:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the first group\n@return {\"_group_id\": \"Id of the first group\"}",
            "id": 19166,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_first_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19154,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6614:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19157,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19156,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19166,
                  "src": "6673:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19155,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6673:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6672:19:68"
            },
            "scope": 19321,
            "src": "6589:164:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19178,
              "nodeType": "Block",
              "src": "6963:58:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19171,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19169,
                      "src": "6969:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19173,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "7002:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19174,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "7002:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        ],
                        "id": 19172,
                        "name": "read_last_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22508,
                        "src": "6981:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 19175,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6981:35:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6969:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19177,
                  "nodeType": "ExpressionStatement",
                  "src": "6969:47:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the last group\n@return {\"_group_id\": \"Id of the last group\"}",
            "id": 19179,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_last_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19167,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6883:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19169,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19179,
                  "src": "6942:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19168,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6942:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6941:19:68"
            },
            "scope": 19321,
            "src": "6859:162:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19194,
              "nodeType": "Block",
              "src": "7367:81:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19186,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19184,
                      "src": "7373:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19188,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "7410:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19189,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "7410:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19190,
                          "name": "_current_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19181,
                          "src": "7425:17:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 19187,
                        "name": "read_previous_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22542,
                        "src": "7385:24:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) view returns (uint256)"
                        }
                      },
                      "id": 19191,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7385:58:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7373:70:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19193,
                  "nodeType": "ExpressionStatement",
                  "src": "7373:70:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the previous group depending on the given current group\n@param _current_group_id Id of the current group\n@return {\"_group_id\": \"Id of the previous group\"}",
            "id": 19195,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_previous_group_from_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19182,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19181,
                  "name": "_current_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "7263:25:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7263:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7262:27:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19184,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19195,
                  "src": "7346:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19183,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7346:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7345:19:68"
            },
            "scope": 19321,
            "src": "7223:225:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19210,
              "nodeType": "Block",
              "src": "7782:77:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19208,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19202,
                      "name": "_group_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19200,
                      "src": "7788:9:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19204,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "7821:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19205,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "7821:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19206,
                          "name": "_current_group_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19197,
                          "src": "7836:17:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 19203,
                        "name": "read_next_from_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22525,
                        "src": "7800:20:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer,uint256) view returns (uint256)"
                        }
                      },
                      "id": 19207,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7800:54:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7788:66:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19209,
                  "nodeType": "ExpressionStatement",
                  "src": "7788:66:68"
                }
              ]
            },
            "documentation": "@notice Returns the id of the next group depending on the given current group\n@param _current_group_id Id of the current group\n@return {\"_group_id\": \"Id of the next group\"}",
            "id": 19211,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_next_group_from_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19197,
                  "name": "_current_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19211,
                  "src": "7678:25:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19196,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7678:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7677:27:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19201,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19200,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19211,
                  "src": "7761:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7761:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7760:19:68"
            },
            "scope": 19321,
            "src": "7642:217:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19223,
              "nodeType": "Block",
              "src": "8083:58:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19216,
                      "name": "_total_groups",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19214,
                      "src": "8089:13:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19218,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "8122:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19219,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18660,
                          "src": "8122:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_Uint_$22608_storage",
                            "typeString": "struct DoublyLinkedList.Uint storage ref"
                          }
                        ],
                        "id": 19217,
                        "name": "read_total_uints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22556,
                        "src": "8105:16:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Uint_$22608_storage_ptr_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.Uint storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 19220,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8105:31:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8089:47:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19222,
                  "nodeType": "ExpressionStatement",
                  "src": "8089:47:68"
                }
              ]
            },
            "documentation": "@notice Returns the total number of groups\n@return {\"_total_groups\": \"Total number of groups\"}",
            "id": 19224,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_groups",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7999:2:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19215,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19214,
                  "name": "_total_groups",
                  "nodeType": "VariableDeclaration",
                  "scope": 19224,
                  "src": "8058:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19213,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8058:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8057:23:68"
            },
            "scope": 19321,
            "src": "7973:168:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19241,
              "nodeType": "Block",
              "src": "8404:98:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19239,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19231,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19229,
                      "src": "8410:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19233,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "8452:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19234,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "8452:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19236,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19226,
                              "src": "8486:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19235,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8478:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8478:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 19232,
                        "name": "read_first_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22072,
                        "src": "8418:33:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (address)"
                        }
                      },
                      "id": 19238,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8418:79:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8410:87:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19240,
                  "nodeType": "ExpressionStatement",
                  "src": "8410:87:68"
                }
              ]
            },
            "documentation": "@notice Returns the first user of a group\n@param _group_id Id of the group\n@return {\"_user\": \"Address of the user\"}",
            "id": 19242,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_first_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19227,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19226,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19242,
                  "src": "8312:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19225,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8312:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8311:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19230,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19229,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19242,
                  "src": "8387:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19228,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8387:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8386:15:68"
            },
            "scope": 19321,
            "src": "8278:224:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19259,
              "nodeType": "Block",
              "src": "8763:97:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19249,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19247,
                      "src": "8769:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19251,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "8810:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19252,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "8810:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19254,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19244,
                              "src": "8844:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8836:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8836:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 19250,
                        "name": "read_last_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22089,
                        "src": "8777:32:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (address)"
                        }
                      },
                      "id": 19256,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8777:78:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8769:86:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19258,
                  "nodeType": "ExpressionStatement",
                  "src": "8769:86:68"
                }
              ]
            },
            "documentation": "@notice Returns the last user of a group\n@param _group_id Id of the group\n@return {\"_user\": \"Address of the user\"}",
            "id": 19260,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_last_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19244,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19260,
                  "src": "8671:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19243,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8671:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8670:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19247,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19260,
                  "src": "8746:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19246,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8746:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8745:15:68"
            },
            "scope": 19321,
            "src": "8638:222:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19280,
              "nodeType": "Block",
              "src": "9236:112:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19269,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19267,
                      "src": "9242:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19271,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "9283:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19272,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "9283:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19274,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19262,
                              "src": "9317:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9309:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9309:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19276,
                          "name": "_current_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19264,
                          "src": "9329:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 19270,
                        "name": "read_next_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22109,
                        "src": "9250:32:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) view returns (address)"
                        }
                      },
                      "id": 19277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9250:93:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9242:101:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19279,
                  "nodeType": "ExpressionStatement",
                  "src": "9242:101:68"
                }
              ]
            },
            "documentation": "@notice Returns the next user of a group depending on the given current user\n@param _group_id Id of the group\n@param _current_user Address of the current user\n@return {\"_user\": \"Address of the next user\"}",
            "id": 19281,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_next_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19265,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19262,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19281,
                  "src": "9121:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19261,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9121:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19264,
                  "name": "_current_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19281,
                  "src": "9140:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19263,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9140:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9120:42:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19268,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19267,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19281,
                  "src": "9219:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19266,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9219:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9218:15:68"
            },
            "scope": 19321,
            "src": "9088:260:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19301,
              "nodeType": "Block",
              "src": "9732:116:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19290,
                      "name": "_user",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19288,
                      "src": "9738:5:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19292,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "9783:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19293,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "9783:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19295,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19283,
                              "src": "9817:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19294,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9809:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19296,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9809:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 19297,
                          "name": "_current_user",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 19285,
                          "src": "9829:13:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 19291,
                        "name": "read_previous_from_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22129,
                        "src": "9746:36:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$_t_address_$returns$_t_address_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32,address) view returns (address)"
                        }
                      },
                      "id": 19298,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9746:97:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "9738:105:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 19300,
                  "nodeType": "ExpressionStatement",
                  "src": "9738:105:68"
                }
              ]
            },
            "documentation": "@notice Returns the previous user of a group depending on the given current user\n@param _group_id Id of the group\n@param _current_user Address of the current user\n@return {\"_user\": \"Address of the last user\"}",
            "id": 19302,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_previous_user_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19286,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19283,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19302,
                  "src": "9617:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19282,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9617:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 19285,
                  "name": "_current_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19302,
                  "src": "9636:21:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19284,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9636:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9616:42:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19288,
                  "name": "_user",
                  "nodeType": "VariableDeclaration",
                  "scope": 19302,
                  "src": "9715:13:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 19287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9715:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9714:15:68"
            },
            "scope": 19321,
            "src": "9580:268:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 19319,
              "nodeType": "Block",
              "src": "10139:100:68",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 19317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 19309,
                      "name": "_total_users",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19307,
                      "src": "10145:12:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 19311,
                            "name": "system",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 18681,
                            "src": "10189:6:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_System_$18679_storage",
                              "typeString": "struct DirectoryStorage.System storage ref"
                            }
                          },
                          "id": 19312,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "groups_collection",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 18662,
                          "src": "10189:24:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 19314,
                              "name": "_group_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19304,
                              "src": "10223:9:68",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 19313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10215:7:68",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes32_$",
                              "typeString": "type(bytes32)"
                            },
                            "typeName": "bytes32"
                          },
                          "id": 19315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10215:18:68",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_IndexedAddress_$22594_storage",
                            "typeString": "struct DoublyLinkedList.IndexedAddress storage ref"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 19310,
                        "name": "read_total_indexed_addresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22146,
                        "src": "10160:28:68",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_IndexedAddress_$22594_storage_ptr_$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (struct DoublyLinkedList.IndexedAddress storage pointer,bytes32) view returns (uint256)"
                        }
                      },
                      "id": 19316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10160:74:68",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10145:89:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 19318,
                  "nodeType": "ExpressionStatement",
                  "src": "10145:89:68"
                }
              ]
            },
            "documentation": "@notice Returns the total number of users of a group\n@param _group_id Id of the group\n@return {\"_total_users\": \"Total number of users\"}",
            "id": 19320,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_users_in_group",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 19305,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19304,
                  "name": "_group_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 19320,
                  "src": "10040:17:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 19303,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10040:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10039:19:68"
            },
            "payable": false,
            "returnParameters": {
              "id": 19308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 19307,
                  "name": "_total_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 19320,
                  "src": "10115:20:68",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 19306,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10115:7:68",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10114:22:68"
            },
            "scope": 19321,
            "src": "10005:234:68",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          }
        ],
        "scope": 19322,
        "src": "287:9954:68"
      }
    ],
    "src": "0:10242:68"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.2",
  "updatedAt": "2020-03-13T02:38:46.127Z"
}