{
  "contractName": "AgentRolesUpgradeable",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_role",
          "type": "string"
        }
      ],
      "name": "RoleRemoved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgentAdmin",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgentAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgentAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isSupplyModifier",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addSupplyModifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeSupplyModifier",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isFreezer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addFreezer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeFreezer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isTransferManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addTransferManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeTransferManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isRecoveryAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addRecoveryAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeRecoveryAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isComplianceAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addComplianceAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeComplianceAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isWhiteListManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addWhiteListManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeWhiteListManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_role\",\"type\":\"string\"}],\"name\":\"RoleRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addComplianceAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addFreezer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addRecoveryAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addSupplyModifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addTransferManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addWhiteListManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isAgentAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isComplianceAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isFreezer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isRecoveryAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isSupplyModifier\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isTransferManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isWhiteListManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeComplianceAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeFreezer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeRecoveryAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeSupplyModifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeTransferManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeWhiteListManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isAgentAdmin(address)\":{\"details\":\"AgentAdmin Role _agentAdmin\"},\"isComplianceAgent(address)\":{\"details\":\"ComplianceAgent Role _complianceAgents\"},\"isFreezer(address)\":{\"details\":\"Freezer Role _freezers\"},\"isRecoveryAgent(address)\":{\"details\":\"RecoveryAgent Role _recoveryAgents\"},\"isSupplyModifier(address)\":{\"details\":\"SupplyModifier Role _supplyModifiers\"},\"isTransferManager(address)\":{\"details\":\"TransferManager Role _transferManagers\"},\"isWhiteListManager(address)\":{\"details\":\"WhiteListManager Role _whiteListManagers\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/roles/AgentRolesUpgradeable.sol\":\"AgentRolesUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"project:/contracts/roles/AgentRolesUpgradeable.sol\":{\"keccak256\":\"0x8606a61d63fd84f6e4e5c6738598f1b42c62da33d3893489b22214f78576be96\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f15c68df5f2e369949caeb9a1cbb434242fb4287ba4b2a78e879232489a66005\",\"dweb:/ipfs/QmVW14rpU6Ut229a1KPfDrMbDAfjUe2JMhkj6YGzd5zkx8\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50610f8f806100206000396000f3fe608060405234801561001057600080fd5b50600436106101285760003560e01c8063042a36061461012d57806314f2d2761461015557806315d8ca621461016a5780632001c3501461017d5780632acd2000146101905780633966904d146101a35780633cdf8000146101b65780634599fb7b146101c95780634aff432c146101dc578063526606c9146101ef57806365d07b2e146102025780636c65fd6a14610215578063715018a6146102285780637489453d146102305780637ad78a4614610243578063860a2bcf146102565780638da5cb5b14610269578063965e61ea14610289578063bd92fcfe1461029c578063c6006c9a146102af578063c8777b50146102c2578063cdf1b693146102d5578063e86c6431146102e8578063f2fde38b146102fb575b600080fd5b61014061013b366004610e68565b61030e565b60405190151581526020015b60405180910390f35b610168610163366004610e68565b610321565b005b610168610178366004610e68565b6103cc565b61014061018b366004610e68565b610461565b61016861019e366004610e68565b61046e565b6101686101b1366004610e68565b6104fc565b6101686101c4366004610e68565b610593565b6101406101d7366004610e68565b610629565b6101686101ea366004610e68565b610636565b6101686101fd366004610e68565b6106cd565b610168610210366004610e68565b61075b565b610140610223366004610e68565b6107ec565b6101686107f9565b61016861023e366004610e68565b61080d565b610140610251366004610e68565b6108a1565b610168610264366004610e68565b6108ae565b610271610943565b6040516001600160a01b03909116815260200161014c565b610168610297366004610e68565b610952565b6101406102aa366004610e68565b6109e8565b6101686102bd366004610e68565b6109f5565b6101686102d0366004610e68565b610a8b565b6101686102e3366004610e68565b610b1f565b6101406102f6366004610e68565b610bb0565b610168610309366004610e68565b610bbd565b600061031b606583610c36565b92915050565b3361032a610943565b6001600160a01b03161480610343575061034333610629565b6103685760405162461bcd60e51b815260040161035f90610e98565b60405180910390fd5b610373606782610cb9565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b60405180910390a25050565b336103d5610943565b6001600160a01b031614806103ee57506103ee33610629565b61040a5760405162461bcd60e51b815260040161035f90610e98565b610415606582610cb9565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606983610c36565b33610477610943565b6001600160a01b03161480610490575061049033610629565b6104ac5760405162461bcd60e51b815260040161035f90610e98565b6104b7606682610d35565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b33610505610943565b6001600160a01b0316148061051e575061051e33610629565b61053a5760405162461bcd60e51b815260040161035f90610e98565b610545606a82610cb9565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b3361059c610943565b6001600160a01b031614806105b557506105b533610629565b6105d15760405162461bcd60e51b815260040161035f90610e98565b6105dc606982610cb9565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606b83610c36565b3361063f610943565b6001600160a01b03161480610658575061065833610629565b6106745760405162461bcd60e51b815260040161035f90610e98565b61067f606a82610d35565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b336106d6610943565b6001600160a01b031614806106ef57506106ef33610629565b61070b5760405162461bcd60e51b815260040161035f90610e98565b610716606682610cb9565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b33610764610943565b6001600160a01b0316148061077d575061077d33610629565b6107995760405162461bcd60e51b815260040161035f90610e98565b6107a4606b82610d35565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b600061031b606683610c36565b610801610db7565b61080b6000610e16565b565b33610816610943565b6001600160a01b0316148061082f575061082f33610629565b61084b5760405162461bcd60e51b815260040161035f90610e98565b610856606882610cb9565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606883610c36565b336108b7610943565b6001600160a01b031614806108d057506108d033610629565b6108ec5760405162461bcd60e51b815260040161035f90610e98565b6108f7606582610d35565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b6033546001600160a01b031690565b3361095b610943565b6001600160a01b03161480610974575061097433610629565b6109905760405162461bcd60e51b815260040161035f90610e98565b61099b606782610d35565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b600061031b606a83610c36565b336109fe610943565b6001600160a01b03161480610a175750610a1733610629565b610a335760405162461bcd60e51b815260040161035f90610e98565b610a3e606982610d35565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b33610a94610943565b6001600160a01b03161480610aad5750610aad33610629565b610ac95760405162461bcd60e51b815260040161035f90610e98565b610ad4606882610d35565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b33610b28610943565b6001600160a01b03161480610b415750610b4133610629565b610b5d5760405162461bcd60e51b815260040161035f90610e98565b610b68606b82610cb9565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606783610c36565b610bc5610db7565b6001600160a01b038116610c2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035f565b610c3381610e16565b50565b60006001600160a01b038216610c995760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161035f565b506001600160a01b03166000908152602091909152604090205460ff1690565b610cc38282610c36565b15610d105760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161035f565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610d3f8282610c36565b610d955760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161035f565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b33610dc0610943565b6001600160a01b03161461080b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161035f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215610e7a57600080fd5b81356001600160a01b0381168114610e9157600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610ef857858101830151858201604001528201610edc565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a2646970667358221220f9c55fcce75db7276ddf17f1d0ab68d9f898d50ff4c5f47bf9cb76340e21348764736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101285760003560e01c8063042a36061461012d57806314f2d2761461015557806315d8ca621461016a5780632001c3501461017d5780632acd2000146101905780633966904d146101a35780633cdf8000146101b65780634599fb7b146101c95780634aff432c146101dc578063526606c9146101ef57806365d07b2e146102025780636c65fd6a14610215578063715018a6146102285780637489453d146102305780637ad78a4614610243578063860a2bcf146102565780638da5cb5b14610269578063965e61ea14610289578063bd92fcfe1461029c578063c6006c9a146102af578063c8777b50146102c2578063cdf1b693146102d5578063e86c6431146102e8578063f2fde38b146102fb575b600080fd5b61014061013b366004610e68565b61030e565b60405190151581526020015b60405180910390f35b610168610163366004610e68565b610321565b005b610168610178366004610e68565b6103cc565b61014061018b366004610e68565b610461565b61016861019e366004610e68565b61046e565b6101686101b1366004610e68565b6104fc565b6101686101c4366004610e68565b610593565b6101406101d7366004610e68565b610629565b6101686101ea366004610e68565b610636565b6101686101fd366004610e68565b6106cd565b610168610210366004610e68565b61075b565b610140610223366004610e68565b6107ec565b6101686107f9565b61016861023e366004610e68565b61080d565b610140610251366004610e68565b6108a1565b610168610264366004610e68565b6108ae565b610271610943565b6040516001600160a01b03909116815260200161014c565b610168610297366004610e68565b610952565b6101406102aa366004610e68565b6109e8565b6101686102bd366004610e68565b6109f5565b6101686102d0366004610e68565b610a8b565b6101686102e3366004610e68565b610b1f565b6101406102f6366004610e68565b610bb0565b610168610309366004610e68565b610bbd565b600061031b606583610c36565b92915050565b3361032a610943565b6001600160a01b03161480610343575061034333610629565b6103685760405162461bcd60e51b815260040161035f90610e98565b60405180910390fd5b610373606782610cb9565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b60405180910390a25050565b336103d5610943565b6001600160a01b031614806103ee57506103ee33610629565b61040a5760405162461bcd60e51b815260040161035f90610e98565b610415606582610cb9565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606983610c36565b33610477610943565b6001600160a01b03161480610490575061049033610629565b6104ac5760405162461bcd60e51b815260040161035f90610e98565b6104b7606682610d35565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b33610505610943565b6001600160a01b0316148061051e575061051e33610629565b61053a5760405162461bcd60e51b815260040161035f90610e98565b610545606a82610cb9565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b3361059c610943565b6001600160a01b031614806105b557506105b533610629565b6105d15760405162461bcd60e51b815260040161035f90610e98565b6105dc606982610cb9565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606b83610c36565b3361063f610943565b6001600160a01b03161480610658575061065833610629565b6106745760405162461bcd60e51b815260040161035f90610e98565b61067f606a82610d35565b604080518082018252601081526f2bb434ba32a634b9ba26b0b730b3b2b960811b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b336106d6610943565b6001600160a01b031614806106ef57506106ef33610629565b61070b5760405162461bcd60e51b815260040161035f90610e98565b610716606682610cb9565b6040805180820182526007815266233932b2bd32b960c91b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b33610764610943565b6001600160a01b0316148061077d575061077d33610629565b6107995760405162461bcd60e51b815260040161035f90610e98565b6107a4606b82610d35565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b600061031b606683610c36565b610801610db7565b61080b6000610e16565b565b33610816610943565b6001600160a01b0316148061082f575061082f33610629565b61084b5760405162461bcd60e51b815260040161035f90610e98565b610856606882610cb9565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606883610c36565b336108b7610943565b6001600160a01b031614806108d057506108d033610629565b6108ec5760405162461bcd60e51b815260040161035f90610e98565b6108f7606582610d35565b604080518082018252600e81526d29bab838363ca6b7b234b334b2b960911b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b6033546001600160a01b031690565b3361095b610943565b6001600160a01b03161480610974575061097433610629565b6109905760405162461bcd60e51b815260040161035f90610e98565b61099b606782610d35565b604080518082018252600f81526e2a3930b739b332b926b0b730b3b2b960891b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b600061031b606a83610c36565b336109fe610943565b6001600160a01b03161480610a175750610a1733610629565b610a335760405162461bcd60e51b815260040161035f90610e98565b610a3e606982610d35565b604080518082018252600f81526e10dbdb5c1b1a585b98d95059d95b9d608a1b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b33610a94610943565b6001600160a01b03161480610aad5750610aad33610629565b610ac95760405162461bcd60e51b815260040161035f90610e98565b610ad4606882610d35565b604080518082018252600d81526c149958dbdd995c9e5059d95b9d609a1b602082015290516001600160a01b03831690600080516020610f1a833981519152906103c0908490610ecb565b33610b28610943565b6001600160a01b03161480610b415750610b4133610629565b610b5d5760405162461bcd60e51b815260040161035f90610e98565b610b68606b82610cb9565b604080518082018252600a81526920b3b2b73a20b236b4b760b11b602082015290516001600160a01b03831690600080516020610f3a833981519152906103c0908490610ecb565b600061031b606783610c36565b610bc5610db7565b6001600160a01b038116610c2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035f565b610c3381610e16565b50565b60006001600160a01b038216610c995760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b606482015260840161035f565b506001600160a01b03166000908152602091909152604090205460ff1690565b610cc38282610c36565b15610d105760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015260640161035f565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610d3f8282610c36565b610d955760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b606482015260840161035f565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b33610dc0610943565b6001600160a01b03161461080b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161035f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208284031215610e7a57600080fd5b81356001600160a01b0381168114610e9157600080fd5b9392505050565b6020808252601990820152782937b6329d1029b2b73232b91034b9902727aa1020b236b4b760391b604082015260600190565b600060208083528351808285015260005b81811015610ef857858101830151858201604001528201610edc565b506000604082860101526040601f19601f830116850101925050509291505056fed211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803abfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489a2646970667358221220f9c55fcce75db7276ddf17f1d0ab68d9f898d50ff4c5f47bf9cb76340e21348764736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:3542:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "84:216:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "130:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "139:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "142:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "126:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "94:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "155:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "181:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "168:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "168:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "159:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "254:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "263:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "266:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "256:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "256:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "256:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "213:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "224:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "239:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "244:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "235:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "235:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "248:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "231:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "231:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "220:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "220:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "210:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "210:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "203:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "200:70:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "279:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "289:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "279:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "50:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "61:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "73:6:54",
                "type": ""
              }
            ],
            "src": "14:286:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "400:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "410:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "422:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "433:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "418:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "418:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "410:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "452:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "477:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "470:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "470:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "463:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "463:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "445:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "445:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "445:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "369:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "380:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "391:4:54",
                "type": ""
              }
            ],
            "src": "305:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "598:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "608:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "620:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "631:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "616:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "616:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "608:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "650:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "665:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "681:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "686:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "677:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "677:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "690:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "673:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "673:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "661:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "661:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "643:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "643:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "643:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "567:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "578:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "589:4:54",
                "type": ""
              }
            ],
            "src": "497:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "879:175:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "896:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "907:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "889:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "889:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "889:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "930:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "941:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "926:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "926:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "946:2:54",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "919:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "919:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "919:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "969:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "980:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "965:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "965:18:54"
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "985:27:54",
                        "type": "",
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "958:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "958:55:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "958:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1022:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1034:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1045:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1030:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1030:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1022:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "856:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "870:4:54",
                "type": ""
              }
            ],
            "src": "705:349:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1180:427:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1190:12:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1200:2:54",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1194:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1218:9:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1229:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1211:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1211:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1211:21:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1241:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1261:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "1255:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1255:13:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "1245:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1288:9:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1299:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1284:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1284:18:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1304:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1277:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1277:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1277:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1320:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "1329:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "1324:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1389:90:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nodeType": "YulIdentifier",
                                      "src": "1418:9:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "1429:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1414:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1414:17:54"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "1433:2:54",
                                  "type": "",
                                  "value": "64"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "1410:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1410:26:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value0",
                                          "nodeType": "YulIdentifier",
                                          "src": "1452:6:54"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1460:1:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1448:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1448:14:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "1464:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "1444:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "1444:23:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "1438:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "1438:30:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "1403:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1403:66:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1403:66:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "1350:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "1353:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "1347:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1347:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "1361:19:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1363:15:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "1372:1:54"
                            },
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "1375:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "1368:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1368:10:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "1363:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "1343:3:54",
                    "statements": []
                  },
                  "src": "1339:140:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nodeType": "YulIdentifier",
                                "src": "1503:9:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "1514:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1499:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1499:22:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1523:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1495:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1495:31:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1528:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1488:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1488:42:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1488:42:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1539:62:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1555:9:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1574:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1582:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1570:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1570:15:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1591:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "1587:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1587:7:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "1566:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1566:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1551:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1551:45:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1598:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1547:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1547:54:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1539:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1149:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1160:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1171:4:54",
                "type": ""
              }
            ],
            "src": "1059:548:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1786:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1803:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1814:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1796:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1796:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1796:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1837:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1848:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1833:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1833:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1853:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1826:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1826:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1826:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1876:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1887:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1872:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1872:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1892:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1865:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1865:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1865:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1947:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1958:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1943:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1943:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "1963:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1936:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1936:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1936:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1981:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1993:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2004:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1989:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1989:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1981:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1763:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1777:4:54",
                "type": ""
              }
            ],
            "src": "1612:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2193:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2210:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2221:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2203:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2203:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2203:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2244:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2255:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2240:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2240:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2260:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2233:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2233:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2233:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2283:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2294:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2279:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2279:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2299:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2272:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2272:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2272:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2354:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2365:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2350:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2350:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2370:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2343:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2343:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2343:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2384:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2396:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2407:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2392:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2392:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2384:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2170:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2184:4:54",
                "type": ""
              }
            ],
            "src": "2019:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2596:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2613:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2624:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2606:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2606:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2606:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2647:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2658:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2643:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2643:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2663:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2636:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2636:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2636:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2686:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2697:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2682:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2682:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "2702:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2675:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2675:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2675:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2745:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2757:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2768:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2753:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2753:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2745:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2573:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2587:4:54",
                "type": ""
              }
            ],
            "src": "2422:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2956:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2973:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2984:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2966:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2966:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2966:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3007:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3018:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3003:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3003:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3023:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2996:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2996:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2996:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3046:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3057:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3042:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3042:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3062:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3035:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3035:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3035:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3117:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3128:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3113:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3113:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3133:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3106:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3106:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3106:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3146:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3158:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3169:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3154:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3154:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3146:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2933:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2947:4:54",
                "type": ""
              }
            ],
            "src": "2782:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3358:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3375:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3386:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3368:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3368:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3368:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3409:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3420:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3405:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3405:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3425:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3398:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3398:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3398:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3448:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3459:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3444:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3444:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "3464:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3437:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3437:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3437:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3508:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3520:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3531:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3516:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3516:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3508:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3335:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3349:4:54",
                "type": ""
              }
            ],
            "src": "3184:356:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Role: Sender is NOT Admin\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        let _1 := 32\n        mstore(headStart, _1)\n        let length := mload(value0)\n        mstore(add(headStart, _1), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 64), mload(add(add(value0, i), _1)))\n        }\n        mstore(add(add(headStart, length), 64), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Roles: account is the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Roles: account already has role\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Roles: account does not have rol\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1218:4652:46:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1218:4652:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2449:121;;;;;;:::i;:::-;;:::i;:::-;;;470:14:54;;463:22;445:41;;433:2;418:18;2449:121:46;;;;;;;;3682:197;;;;;;:::i;:::-;;:::i;:::-;;2576:194;;;;;;:::i;:::-;;:::i;4725:123::-;;;;;;:::i;:::-;;:::i;3313:181::-;;;;;;:::i;:::-;;:::i;5454:200::-;;;;;;:::i;:::-;;:::i;4854:197::-;;;;;;:::i;:::-;;:::i;1898:112::-;;;;;;:::i;:::-;;:::i;5660:208::-;;;;;;:::i;:::-;;:::i;3134:173::-;;;;;;:::i;:::-;;:::i;2203:189::-;;;;;;:::i;:::-;;:::i;3021:107::-;;;;;;:::i;:::-;;:::i;2071:101:9:-;;;:::i;4270:191:46:-;;;;;;:::i;:::-;;:::i;4145:119::-;;;;;;:::i;:::-;;:::i;2776:202::-;;;;;;:::i;:::-;;:::i;1441:85:9:-;;;:::i;:::-;;;-1:-1:-1;;;;;661:32:54;;;643:51;;631:2;616:18;1441:85:9;497:203:54;3885:205:46;;;;;;:::i;:::-;;:::i;5323:125::-;;;;;;:::i;:::-;;:::i;5057:205::-;;;;;;:::i;:::-;;:::i;4467:199::-;;;;;;:::i;:::-;;:::i;2016:181::-;;;;;;:::i;:::-;;:::i;3553:123::-;;;;;;:::i;:::-;;:::i;2321:198:9:-;;;;;;:::i;:::-;;:::i;2449:121:46:-;2512:4;2535:28;:16;2556:6;2535:20;:28::i;:::-;2528:35;2449:121;-1:-1:-1;;2449:121:46:o;3682:197::-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;;;;;;;;;3755:29:::1;:17;3777:6:::0;3755:21:::1;:29::i;:::-;3794:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3794:39:46::1;::::0;::::1;::::0;3848:24;;-1:-1:-1;;;;;3848:24:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;3848:24:46;::::1;::::0;3794:39;;3848:24:::1;:::i;:::-;;;;;;;;3745:134;3682:197:::0;:::o;2576:194::-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;2648:28:::1;:16;2669:6:::0;2648:20:::1;:28::i;:::-;2686:38;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2686:38:46::1;::::0;::::1;::::0;2739:24;;-1:-1:-1;;;;;2739:24:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;2739:24:46;::::1;::::0;2686:38;;2739:24:::1;:::i;4725:123::-:0;4789:4;4812:29;:17;4834:6;4812:21;:29::i;3313:181::-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;3381:24:::1;:9;3398:6:::0;3381:16:::1;:24::i;:::-;3415:31;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3415:31:46::1;::::0;::::1;::::0;3461:26;;-1:-1:-1;;;;;3461:26:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;3461:26:46;::::1;::::0;3415:31;;3461:26:::1;:::i;5454:200::-:0;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;5528:30:::1;:18;5551:6:::0;5528:22:::1;:30::i;:::-;5568:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5568:40:46::1;::::0;::::1;::::0;5623:24;;-1:-1:-1;;;;;5623:24:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;5623:24:46;::::1;::::0;5568:40;;5623:24:::1;:::i;4854:197::-:0;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;4927:29:::1;:17;4949:6:::0;4927:21:::1;:29::i;:::-;4966:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4966:39:46::1;::::0;::::1;::::0;5020:24;;-1:-1:-1;;;;;5020:24:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;5020:24:46;::::1;::::0;4966:39;;5020:24:::1;:::i;1898:112::-:0;1957:4;1980:23;:11;1996:6;1980:15;:23::i;5660:208::-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;5737:33:::1;:18;5763:6:::0;5737:25:::1;:33::i;:::-;5780:40;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5780:40:46::1;::::0;::::1;::::0;5835:26;;-1:-1:-1;;;;;5835:26:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;5835:26:46;::::1;::::0;5780:40;;5835:26:::1;:::i;3134:173::-:0;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;3199:21:::1;:9;3213:6:::0;3199:13:::1;:21::i;:::-;3230:31;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;3230:31:46::1;::::0;::::1;::::0;3276:24;;-1:-1:-1;;;;;3276:24:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;3276:24:46;::::1;::::0;3230:31;;3276:24:::1;:::i;2203:189::-:0;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;2274:26:::1;:11;2293:6:::0;2274:18:::1;:26::i;:::-;2310:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2310:34:46::1;::::0;::::1;::::0;2359:26;;-1:-1:-1;;;;;2359:26:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;2359:26:46;::::1;::::0;2310:34;;2359:26:::1;:::i;3021:107::-:0;3077:4;3100:21;:9;3114:6;3100:13;:21::i;2071:101:9:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;4270:191:46:-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;4341:27:::1;:15;4361:6:::0;4341:19:::1;:27::i;:::-;4378:37;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4378:37:46::1;::::0;::::1;::::0;4430:24;;-1:-1:-1;;;;;4430:24:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;4430:24:46;::::1;::::0;4378:37;;4430:24:::1;:::i;4145:119::-:0;4207:4;4230:27;:15;4250:6;4230:19;:27::i;2776:202::-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;2851:31:::1;:16;2875:6:::0;2851:23:::1;:31::i;:::-;2892:38;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2892:38:46::1;::::0;::::1;::::0;2945:26;;-1:-1:-1;;;;;2945:26:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;2945:26:46;::::1;::::0;2892:38;;2945:26:::1;:::i;1441:85:9:-:0;1513:6;;-1:-1:-1;;;;;1513:6:9;;1441:85::o;3885:205:46:-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;3961:32:::1;:17;3986:6:::0;3961:24:::1;:32::i;:::-;4003:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4003:39:46::1;::::0;::::1;::::0;4057:26;;-1:-1:-1;;;;;4057:26:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;4057:26:46;::::1;::::0;4003:39;;4057:26:::1;:::i;5323:125::-:0;5388:4;5411:30;:18;5434:6;5411:22;:30::i;5057:205::-;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;5133:32:::1;:17;5158:6:::0;5133:24:::1;:32::i;:::-;5175:39;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;5175:39:46::1;::::0;::::1;::::0;5229:26;;-1:-1:-1;;;;;5229:26:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;5229:26:46;::::1;::::0;5175:39;;5229:26:::1;:::i;4467:199::-:0;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;4541:30:::1;:15;4564:6:::0;4541:22:::1;:30::i;:::-;4581:37;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;4581:37:46::1;::::0;::::1;::::0;4633:26;;-1:-1:-1;;;;;4633:26:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;4633:26:46;::::1;::::0;4581:37;;4633:26:::1;:::i;2016:181::-:0;1762:10;1751:7;:5;:7::i;:::-;-1:-1:-1;;;;;1751:21:46;;:51;;;-1:-1:-1;1776:26:46;929:10:12;1898:112:46;:::i;1776:26::-;1743:89;;;;-1:-1:-1;;;1743:89:46;;;;;;;:::i;:::-;2084:23:::1;:11;2100:6:::0;2084:15:::1;:23::i;:::-;2117:34;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2117:34:46::1;::::0;::::1;::::0;2166:24;;-1:-1:-1;;;;;2166:24:46;::::1;::::0;-1:-1:-1;;;;;;;;;;;2166:24:46;::::1;::::0;2117:34;;2166:24:::1;:::i;3553:123::-:0;3617:4;3640:29;:17;3662:6;3640:21;:29::i;2321:198:9:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:9;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:9;;1814:2:54;2401:73:9::1;::::0;::::1;1796:21:54::0;1853:2;1833:18;;;1826:30;1892:34;1872:18;;;1865:62;-1:-1:-1;;;1943:18:54;;;1936:36;1989:19;;2401:73:9::1;1612:402:54::0;2401:73:9::1;2484:28;2503:8;2484:18;:28::i;:::-;2321:198:::0;:::o;815:200:50:-;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;2221:2:54;903:68:50;;;2203:21:54;2260:2;2240:18;;;2233:30;2299:34;2279:18;;;2272:62;-1:-1:-1;;;2350:18:54;;;2343:32;2392:19;;903:68:50;2019:398:54;903:68:50;-1:-1:-1;;;;;;988:20:50;:11;:20;;;;;;;;;;;;;;;815:200::o;296:175::-;373:18;377:4;383:7;373:3;:18::i;:::-;372:19;364:63;;;;-1:-1:-1;;;364:63:50;;2624:2:54;364:63:50;;;2606:21:54;2663:2;2643:18;;;2636:30;2702:33;2682:18;;;2675:61;2753:18;;364:63:50;2422:355:54;364:63:50;-1:-1:-1;;;;;437:20:50;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;437:27:50;460:4;437:27;;;296:175::o;546:180::-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;2984:2:54;617:64:50;;;2966:21:54;3023:2;3003:18;;;2996:30;3062:34;3042:18;;;3035:62;-1:-1:-1;;;3113:18:54;;;3106:31;3154:19;;617:64:50;2782:397:54;617:64:50;-1:-1:-1;;;;;691:20:50;714:5;691:20;;;;;;;;;;;:28;;-1:-1:-1;;691:28:50;;;546:180::o;1599:130:9:-;929:10:12;1662:7:9;:5;:7::i;:::-;-1:-1:-1;;;;;1662:23:9;;1654:68;;;;-1:-1:-1;;;1654:68:9;;3386:2:54;1654:68:9;;;3368:21:54;;;3405:18;;;3398:30;3464:34;3444:18;;;3437:62;3516:18;;1654:68:9;3184:356:54;2673:187:9;2765:6;;;-1:-1:-1;;;;;2781:17:9;;;-1:-1:-1;;;;;;2781:17:9;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;14:286:54:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;168:23;;-1:-1:-1;;;;;220:31:54;;210:42;;200:70;;266:1;263;256:12;200:70;289:5;14:286;-1:-1:-1;;;14:286:54:o;705:349::-;907:2;889:21;;;946:2;926:18;;;919:30;-1:-1:-1;;;980:2:54;965:18;;958:55;1045:2;1030:18;;705:349::o;1059:548::-;1171:4;1200:2;1229;1218:9;1211:21;1261:6;1255:13;1304:6;1299:2;1288:9;1284:18;1277:34;1329:1;1339:140;1353:6;1350:1;1347:13;1339:140;;;1448:14;;;1444:23;;1438:30;1414:17;;;1433:2;1410:26;1403:66;1368:10;;1339:140;;;1343:3;1528:1;1523:2;1514:6;1503:9;1499:22;1495:31;1488:42;1598:2;1591;1587:7;1582:2;1574:6;1570:15;1566:29;1555:9;1551:45;1547:54;1539:62;;;;1059:548;;;;:::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport '@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol';\n\nimport './Roles.sol';\n\ncontract AgentRolesUpgradeable is OwnableUpgradeable\n\n {\n    using Roles for Roles.Role;\n\n    event RoleAdded(address indexed _agent, string _role);\n    event RoleRemoved(address indexed _agent, string _role);\n\n    Roles.Role private _supplyModifiers;\n    Roles.Role private _freezers;\n    Roles.Role private _transferManagers;\n    Roles.Role private _recoveryAgents;\n    Roles.Role private _complianceAgents;\n    Roles.Role private _whiteListManagers;\n    Roles.Role private _agentAdmin;\n\n    modifier onlyAdmin() {\n        require(owner() == msg.sender || isAgentAdmin(_msgSender()), 'Role: Sender is NOT Admin');\n        _;\n    }\n\n    /// @dev AgentAdmin Role _agentAdmin\n\n    function isAgentAdmin(address _agent) public view returns (bool) {\n        return _agentAdmin.has(_agent);\n    }\n\n    function addAgentAdmin(address _agent) external onlyAdmin {\n        _agentAdmin.add(_agent);\n        string memory _role = 'AgentAdmin';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeAgentAdmin(address _agent) external onlyAdmin {\n        _agentAdmin.remove(_agent);\n        string memory _role = 'AgentAdmin';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev SupplyModifier Role _supplyModifiers\n\n    function isSupplyModifier(address _agent) public view returns (bool) {\n        return _supplyModifiers.has(_agent);\n    }\n\n    function addSupplyModifier(address _agent) external onlyAdmin {\n        _supplyModifiers.add(_agent);\n        string memory _role = 'SupplyModifier';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeSupplyModifier(address _agent) external onlyAdmin {\n        _supplyModifiers.remove(_agent);\n        string memory _role = 'SupplyModifier';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev Freezer Role _freezers\n\n    function isFreezer(address _agent) public view returns (bool) {\n        return _freezers.has(_agent);\n    }\n\n    function addFreezer(address _agent) external onlyAdmin {\n        _freezers.add(_agent);\n        string memory _role = 'Freezer';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeFreezer(address _agent) external onlyAdmin {\n        _freezers.remove(_agent);\n        string memory _role = 'Freezer';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev TransferManager Role _transferManagers\n\n    function isTransferManager(address _agent) public view returns (bool) {\n        return _transferManagers.has(_agent);\n    }\n\n    function addTransferManager(address _agent) external onlyAdmin {\n        _transferManagers.add(_agent);\n        string memory _role = 'TransferManager';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeTransferManager(address _agent) external onlyAdmin {\n        _transferManagers.remove(_agent);\n        string memory _role = 'TransferManager';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev RecoveryAgent Role _recoveryAgents\n\n    function isRecoveryAgent(address _agent) public view returns (bool) {\n        return _recoveryAgents.has(_agent);\n    }\n\n    function addRecoveryAgent(address _agent) external onlyAdmin {\n        _recoveryAgents.add(_agent);\n        string memory _role = 'RecoveryAgent';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeRecoveryAgent(address _agent) external onlyAdmin {\n        _recoveryAgents.remove(_agent);\n        string memory _role = 'RecoveryAgent';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev ComplianceAgent Role _complianceAgents\n\n    function isComplianceAgent(address _agent) public view returns (bool) {\n        return _complianceAgents.has(_agent);\n    }\n\n    function addComplianceAgent(address _agent) external onlyAdmin {\n        _complianceAgents.add(_agent);\n        string memory _role = 'ComplianceAgent';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeComplianceAgent(address _agent) external onlyAdmin {\n        _complianceAgents.remove(_agent);\n        string memory _role = 'ComplianceAgent';\n        emit RoleRemoved(_agent, _role);\n    }\n\n    /// @dev WhiteListManager Role _whiteListManagers\n\n    function isWhiteListManager(address _agent) public view returns (bool) {\n        return _whiteListManagers.has(_agent);\n    }\n\n    function addWhiteListManager(address _agent) external onlyAdmin {\n        _whiteListManagers.add(_agent);\n        string memory _role = 'WhiteListManager';\n        emit RoleAdded(_agent, _role);\n    }\n\n    function removeWhiteListManager(address _agent) external onlyAdmin {\n        _whiteListManagers.remove(_agent);\n        string memory _role = 'WhiteListManager';\n        emit RoleRemoved(_agent, _role);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/roles/AgentRolesUpgradeable.sol",
  "ast": {
    "absolutePath": "project:/contracts/roles/AgentRolesUpgradeable.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        2350
      ],
      "AgentRolesUpgradeable": [
        10167
      ],
      "ContextUpgradeable": [
        2392
      ],
      "Initializable": [
        2107
      ],
      "OwnableUpgradeable": [
        1956
      ],
      "Roles": [
        11901
      ]
    },
    "id": 10168,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9687,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:46"
      },
      {
        "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "id": 9688,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10168,
        "sourceUnit": 1957,
        "src": "1118:75:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/Roles.sol",
        "file": "./Roles.sol",
        "id": 9689,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 10168,
        "sourceUnit": 11902,
        "src": "1195:21:46",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 9690,
              "name": "OwnableUpgradeable",
              "nameLocations": [
                "1252:18:46"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 1956,
              "src": "1252:18:46"
            },
            "id": 9691,
            "nodeType": "InheritanceSpecifier",
            "src": "1252:18:46"
          }
        ],
        "canonicalName": "AgentRolesUpgradeable",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 10167,
        "linearizedBaseContracts": [
          10167,
          1956,
          2392,
          2107
        ],
        "name": "AgentRolesUpgradeable",
        "nameLocation": "1227:21:46",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 9695,
            "libraryName": {
              "id": 9692,
              "name": "Roles",
              "nameLocations": [
                "1285:5:46"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 11901,
              "src": "1285:5:46"
            },
            "nodeType": "UsingForDirective",
            "src": "1279:27:46",
            "typeName": {
              "id": 9694,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9693,
                "name": "Roles.Role",
                "nameLocations": [
                  "1295:5:46",
                  "1301:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1295:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1295:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            }
          },
          {
            "anonymous": false,
            "eventSelector": "bfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b700489",
            "id": 9701,
            "name": "RoleAdded",
            "nameLocation": "1318:9:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9700,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9697,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1344:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9701,
                  "src": "1328:22:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9696,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1328:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9699,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1359:5:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9701,
                  "src": "1352:12:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9698,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1352:6:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1327:38:46"
            },
            "src": "1312:54:46"
          },
          {
            "anonymous": false,
            "eventSelector": "d211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a",
            "id": 9707,
            "name": "RoleRemoved",
            "nameLocation": "1377:11:46",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 9706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9703,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1405:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9707,
                  "src": "1389:22:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9702,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1389:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9705,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "_role",
                  "nameLocation": "1420:5:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9707,
                  "src": "1413:12:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9704,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1413:6:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1388:38:46"
            },
            "src": "1371:56:46"
          },
          {
            "constant": false,
            "id": 9710,
            "mutability": "mutable",
            "name": "_supplyModifiers",
            "nameLocation": "1452:16:46",
            "nodeType": "VariableDeclaration",
            "scope": 10167,
            "src": "1433:35:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9709,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9708,
                "name": "Roles.Role",
                "nameLocations": [
                  "1433:5:46",
                  "1439:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1433:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1433:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9713,
            "mutability": "mutable",
            "name": "_freezers",
            "nameLocation": "1493:9:46",
            "nodeType": "VariableDeclaration",
            "scope": 10167,
            "src": "1474:28:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9712,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9711,
                "name": "Roles.Role",
                "nameLocations": [
                  "1474:5:46",
                  "1480:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1474:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1474:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9716,
            "mutability": "mutable",
            "name": "_transferManagers",
            "nameLocation": "1527:17:46",
            "nodeType": "VariableDeclaration",
            "scope": 10167,
            "src": "1508:36:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9715,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9714,
                "name": "Roles.Role",
                "nameLocations": [
                  "1508:5:46",
                  "1514:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1508:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1508:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9719,
            "mutability": "mutable",
            "name": "_recoveryAgents",
            "nameLocation": "1569:15:46",
            "nodeType": "VariableDeclaration",
            "scope": 10167,
            "src": "1550:34:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9718,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9717,
                "name": "Roles.Role",
                "nameLocations": [
                  "1550:5:46",
                  "1556:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1550:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1550:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9722,
            "mutability": "mutable",
            "name": "_complianceAgents",
            "nameLocation": "1609:17:46",
            "nodeType": "VariableDeclaration",
            "scope": 10167,
            "src": "1590:36:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9721,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9720,
                "name": "Roles.Role",
                "nameLocations": [
                  "1590:5:46",
                  "1596:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1590:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1590:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9725,
            "mutability": "mutable",
            "name": "_whiteListManagers",
            "nameLocation": "1651:18:46",
            "nodeType": "VariableDeclaration",
            "scope": 10167,
            "src": "1632:37:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9724,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9723,
                "name": "Roles.Role",
                "nameLocations": [
                  "1632:5:46",
                  "1638:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1632:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1632:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 9728,
            "mutability": "mutable",
            "name": "_agentAdmin",
            "nameLocation": "1694:11:46",
            "nodeType": "VariableDeclaration",
            "scope": 10167,
            "src": "1675:30:46",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Role_$11820_storage",
              "typeString": "struct Roles.Role"
            },
            "typeName": {
              "id": 9727,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 9726,
                "name": "Roles.Role",
                "nameLocations": [
                  "1675:5:46",
                  "1681:4:46"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 11820,
                "src": "1675:10:46"
              },
              "referencedDeclaration": 11820,
              "src": "1675:10:46",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Role_$11820_storage_ptr",
                "typeString": "struct Roles.Role"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 9745,
              "nodeType": "Block",
              "src": "1733:117:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 9740,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 9735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9731,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1879,
                              "src": "1751:5:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 9732,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1751:7:46",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 9733,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "1762:3:46",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 9734,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1766:6:46",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "1762:10:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1751:21:46",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 9737,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2377,
                                "src": "1789:10:46",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 9738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1789:12:46",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9736,
                            "name": "isAgentAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9760,
                            "src": "1776:12:46",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) view returns (bool)"
                            }
                          },
                          "id": 9739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1776:26:46",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1751:51:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "526f6c653a2053656e646572206973204e4f542041646d696e",
                        "id": 9741,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1804:27:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        },
                        "value": "Role: Sender is NOT Admin"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e0747ebade9609a75d2f7261d19516256a9edb89fa8d2c0d89fd74d44bfd7b24",
                          "typeString": "literal_string \"Role: Sender is NOT Admin\""
                        }
                      ],
                      "id": 9730,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "1743:7:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1743:89:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9743,
                  "nodeType": "ExpressionStatement",
                  "src": "1743:89:46"
                },
                {
                  "id": 9744,
                  "nodeType": "PlaceholderStatement",
                  "src": "1842:1:46"
                }
              ]
            },
            "id": 9746,
            "name": "onlyAdmin",
            "nameLocation": "1721:9:46",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 9729,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1730:2:46"
            },
            "src": "1712:138:46",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9759,
              "nodeType": "Block",
              "src": "1963:47:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9756,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9749,
                        "src": "1996:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9754,
                        "name": "_agentAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9728,
                        "src": "1980:11:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9755,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1992:3:46",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "1980:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1980:23:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9753,
                  "id": 9758,
                  "nodeType": "Return",
                  "src": "1973:30:46"
                }
              ]
            },
            "documentation": {
              "id": 9747,
              "nodeType": "StructuredDocumentation",
              "src": "1856:37:46",
              "text": "@dev AgentAdmin Role _agentAdmin"
            },
            "functionSelector": "4599fb7b",
            "id": 9760,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isAgentAdmin",
            "nameLocation": "1907:12:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9750,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9749,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "1928:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9760,
                  "src": "1920:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9748,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1920:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1919:16:46"
            },
            "returnParameters": {
              "id": 9753,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9752,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9760,
                  "src": "1957:4:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9751,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1957:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1956:6:46"
            },
            "scope": 10167,
            "src": "1898:112:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9782,
              "nodeType": "Block",
              "src": "2074:123:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9770,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9762,
                        "src": "2100:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9767,
                        "name": "_agentAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9728,
                        "src": "2084:11:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9769,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2096:3:46",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2084:15:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9771,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2084:23:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9772,
                  "nodeType": "ExpressionStatement",
                  "src": "2084:23:46"
                },
                {
                  "assignments": [
                    9774
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9774,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2131:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9782,
                      "src": "2117:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9773,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2117:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9776,
                  "initialValue": {
                    "hexValue": "4167656e7441646d696e",
                    "id": 9775,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2139:12:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b2245a96861b99efdc4643d40cce2832a12e5ef86875484f517d66446a504a61",
                      "typeString": "literal_string \"AgentAdmin\""
                    },
                    "value": "AgentAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2117:34:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9778,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9762,
                        "src": "2176:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9779,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9774,
                        "src": "2184:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9777,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9701,
                      "src": "2166:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2166:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9781,
                  "nodeType": "EmitStatement",
                  "src": "2161:29:46"
                }
              ]
            },
            "functionSelector": "cdf1b693",
            "id": 9783,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9765,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9764,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2064:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "2064:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "2064:9:46"
              }
            ],
            "name": "addAgentAdmin",
            "nameLocation": "2025:13:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9762,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2047:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9783,
                  "src": "2039:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9761,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2039:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2038:16:46"
            },
            "returnParameters": {
              "id": 9766,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2074:0:46"
            },
            "scope": 10167,
            "src": "2016:181:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9805,
              "nodeType": "Block",
              "src": "2264:128:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9793,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9785,
                        "src": "2293:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9790,
                        "name": "_agentAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9728,
                        "src": "2274:11:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9792,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2286:6:46",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2274:18:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9794,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2274:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9795,
                  "nodeType": "ExpressionStatement",
                  "src": "2274:26:46"
                },
                {
                  "assignments": [
                    9797
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9797,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2324:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9805,
                      "src": "2310:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9796,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2310:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9799,
                  "initialValue": {
                    "hexValue": "4167656e7441646d696e",
                    "id": 9798,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2332:12:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_b2245a96861b99efdc4643d40cce2832a12e5ef86875484f517d66446a504a61",
                      "typeString": "literal_string \"AgentAdmin\""
                    },
                    "value": "AgentAdmin"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2310:34:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9801,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9785,
                        "src": "2371:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9802,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9797,
                        "src": "2379:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9800,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9707,
                      "src": "2359:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2359:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9804,
                  "nodeType": "EmitStatement",
                  "src": "2354:31:46"
                }
              ]
            },
            "functionSelector": "65d07b2e",
            "id": 9806,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9788,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9787,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2254:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "2254:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "2254:9:46"
              }
            ],
            "name": "removeAgentAdmin",
            "nameLocation": "2212:16:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9785,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2237:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9806,
                  "src": "2229:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9784,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2229:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2228:16:46"
            },
            "returnParameters": {
              "id": 9789,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2264:0:46"
            },
            "scope": 10167,
            "src": "2203:189:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9819,
              "nodeType": "Block",
              "src": "2518:52:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9816,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9809,
                        "src": "2556:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9814,
                        "name": "_supplyModifiers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9710,
                        "src": "2535:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9815,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2552:3:46",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "2535:20:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2535:28:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9813,
                  "id": 9818,
                  "nodeType": "Return",
                  "src": "2528:35:46"
                }
              ]
            },
            "documentation": {
              "id": 9807,
              "nodeType": "StructuredDocumentation",
              "src": "2398:46:46",
              "text": "@dev SupplyModifier Role _supplyModifiers"
            },
            "functionSelector": "042a3606",
            "id": 9820,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isSupplyModifier",
            "nameLocation": "2458:16:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9809,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2483:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9820,
                  "src": "2475:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2475:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2474:16:46"
            },
            "returnParameters": {
              "id": 9813,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9812,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9820,
                  "src": "2512:4:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9811,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2512:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2511:6:46"
            },
            "scope": 10167,
            "src": "2449:121:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9842,
              "nodeType": "Block",
              "src": "2638:132:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9830,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9822,
                        "src": "2669:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9827,
                        "name": "_supplyModifiers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9710,
                        "src": "2648:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9829,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2665:3:46",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "2648:20:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2648:28:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9832,
                  "nodeType": "ExpressionStatement",
                  "src": "2648:28:46"
                },
                {
                  "assignments": [
                    9834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9834,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2700:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9842,
                      "src": "2686:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9833,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2686:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9836,
                  "initialValue": {
                    "hexValue": "537570706c794d6f646966696572",
                    "id": 9835,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2708:16:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a783a689a3ac91b113cf2127b80323ff18a782352a3559c3a7a8a84f5247b0e7",
                      "typeString": "literal_string \"SupplyModifier\""
                    },
                    "value": "SupplyModifier"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2686:38:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9838,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9822,
                        "src": "2749:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9839,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9834,
                        "src": "2757:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9837,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9701,
                      "src": "2739:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9840,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2739:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9841,
                  "nodeType": "EmitStatement",
                  "src": "2734:29:46"
                }
              ]
            },
            "functionSelector": "15d8ca62",
            "id": 9843,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9825,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9824,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2628:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "2628:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "2628:9:46"
              }
            ],
            "name": "addSupplyModifier",
            "nameLocation": "2585:17:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9822,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2611:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9843,
                  "src": "2603:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2603:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2602:16:46"
            },
            "returnParameters": {
              "id": 9826,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2638:0:46"
            },
            "scope": 10167,
            "src": "2576:194:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9865,
              "nodeType": "Block",
              "src": "2841:137:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9853,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9845,
                        "src": "2875:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9850,
                        "name": "_supplyModifiers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9710,
                        "src": "2851:16:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9852,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2868:6:46",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "2851:23:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2851:31:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9855,
                  "nodeType": "ExpressionStatement",
                  "src": "2851:31:46"
                },
                {
                  "assignments": [
                    9857
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9857,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "2906:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9865,
                      "src": "2892:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9856,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "2892:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9859,
                  "initialValue": {
                    "hexValue": "537570706c794d6f646966696572",
                    "id": 9858,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2914:16:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a783a689a3ac91b113cf2127b80323ff18a782352a3559c3a7a8a84f5247b0e7",
                      "typeString": "literal_string \"SupplyModifier\""
                    },
                    "value": "SupplyModifier"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2892:38:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9861,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9845,
                        "src": "2957:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9862,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9857,
                        "src": "2965:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9860,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9707,
                      "src": "2945:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2945:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9864,
                  "nodeType": "EmitStatement",
                  "src": "2940:31:46"
                }
              ]
            },
            "functionSelector": "860a2bcf",
            "id": 9866,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9848,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9847,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "2831:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "2831:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "2831:9:46"
              }
            ],
            "name": "removeSupplyModifier",
            "nameLocation": "2785:20:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9845,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "2814:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9866,
                  "src": "2806:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9844,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2806:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2805:16:46"
            },
            "returnParameters": {
              "id": 9849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2841:0:46"
            },
            "scope": 10167,
            "src": "2776:202:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9879,
              "nodeType": "Block",
              "src": "3083:45:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9876,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9869,
                        "src": "3114:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9874,
                        "name": "_freezers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9713,
                        "src": "3100:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9875,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3110:3:46",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3100:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9877,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3100:21:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9873,
                  "id": 9878,
                  "nodeType": "Return",
                  "src": "3093:28:46"
                }
              ]
            },
            "documentation": {
              "id": 9867,
              "nodeType": "StructuredDocumentation",
              "src": "2984:32:46",
              "text": "@dev Freezer Role _freezers"
            },
            "functionSelector": "6c65fd6a",
            "id": 9880,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isFreezer",
            "nameLocation": "3030:9:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9870,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9869,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3048:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9880,
                  "src": "3040:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9868,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3040:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3039:16:46"
            },
            "returnParameters": {
              "id": 9873,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9872,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9880,
                  "src": "3077:4:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9871,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3077:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3076:6:46"
            },
            "scope": 10167,
            "src": "3021:107:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9902,
              "nodeType": "Block",
              "src": "3189:118:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9890,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9882,
                        "src": "3213:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9887,
                        "name": "_freezers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9713,
                        "src": "3199:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9889,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3209:3:46",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3199:13:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9891,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3199:21:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9892,
                  "nodeType": "ExpressionStatement",
                  "src": "3199:21:46"
                },
                {
                  "assignments": [
                    9894
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9894,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3244:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9902,
                      "src": "3230:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9893,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3230:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9896,
                  "initialValue": {
                    "hexValue": "467265657a6572",
                    "id": 9895,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3252:9:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_24e33447c847c15e68fca3f15a635d2d4d83cb99d7befc9068c4a148521fccf4",
                      "typeString": "literal_string \"Freezer\""
                    },
                    "value": "Freezer"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3230:31:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9898,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9882,
                        "src": "3286:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9899,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9894,
                        "src": "3294:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9897,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9701,
                      "src": "3276:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3276:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9901,
                  "nodeType": "EmitStatement",
                  "src": "3271:29:46"
                }
              ]
            },
            "functionSelector": "526606c9",
            "id": 9903,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9885,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9884,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3179:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "3179:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "3179:9:46"
              }
            ],
            "name": "addFreezer",
            "nameLocation": "3143:10:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9882,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3162:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9903,
                  "src": "3154:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9881,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3154:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3153:16:46"
            },
            "returnParameters": {
              "id": 9886,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3189:0:46"
            },
            "scope": 10167,
            "src": "3134:173:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9925,
              "nodeType": "Block",
              "src": "3371:123:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9913,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9905,
                        "src": "3398:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9910,
                        "name": "_freezers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9713,
                        "src": "3381:9:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9912,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3391:6:46",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "3381:16:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9914,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3381:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9915,
                  "nodeType": "ExpressionStatement",
                  "src": "3381:24:46"
                },
                {
                  "assignments": [
                    9917
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9917,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3429:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9925,
                      "src": "3415:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9916,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3415:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9919,
                  "initialValue": {
                    "hexValue": "467265657a6572",
                    "id": 9918,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3437:9:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_24e33447c847c15e68fca3f15a635d2d4d83cb99d7befc9068c4a148521fccf4",
                      "typeString": "literal_string \"Freezer\""
                    },
                    "value": "Freezer"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3415:31:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9921,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9905,
                        "src": "3473:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9922,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9917,
                        "src": "3481:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9920,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9707,
                      "src": "3461:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3461:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9924,
                  "nodeType": "EmitStatement",
                  "src": "3456:31:46"
                }
              ]
            },
            "functionSelector": "2acd2000",
            "id": 9926,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9908,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9907,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3361:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "3361:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "3361:9:46"
              }
            ],
            "name": "removeFreezer",
            "nameLocation": "3322:13:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9906,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9905,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3344:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9926,
                  "src": "3336:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9904,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3336:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3335:16:46"
            },
            "returnParameters": {
              "id": 9909,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3371:0:46"
            },
            "scope": 10167,
            "src": "3313:181:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9939,
              "nodeType": "Block",
              "src": "3623:53:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9936,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9929,
                        "src": "3662:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9934,
                        "name": "_transferManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9716,
                        "src": "3640:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9935,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3658:3:46",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "3640:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3640:29:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9933,
                  "id": 9938,
                  "nodeType": "Return",
                  "src": "3633:36:46"
                }
              ]
            },
            "documentation": {
              "id": 9927,
              "nodeType": "StructuredDocumentation",
              "src": "3500:48:46",
              "text": "@dev TransferManager Role _transferManagers"
            },
            "functionSelector": "e86c6431",
            "id": 9940,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isTransferManager",
            "nameLocation": "3562:17:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9930,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9929,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3588:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9940,
                  "src": "3580:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9928,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3580:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3579:16:46"
            },
            "returnParameters": {
              "id": 9933,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9932,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 9940,
                  "src": "3617:4:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9931,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3617:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3616:6:46"
            },
            "scope": 10167,
            "src": "3553:123:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9962,
              "nodeType": "Block",
              "src": "3745:134:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9950,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9942,
                        "src": "3777:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9947,
                        "name": "_transferManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9716,
                        "src": "3755:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9949,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3773:3:46",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "3755:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3755:29:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9952,
                  "nodeType": "ExpressionStatement",
                  "src": "3755:29:46"
                },
                {
                  "assignments": [
                    9954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9954,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "3808:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9962,
                      "src": "3794:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9953,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "3794:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9956,
                  "initialValue": {
                    "hexValue": "5472616e736665724d616e61676572",
                    "id": 9955,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3816:17:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e7caa93b03e98a472ffbdb5a38430e587fdccd6672a1e391dc128389ecb0c269",
                      "typeString": "literal_string \"TransferManager\""
                    },
                    "value": "TransferManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3794:39:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9958,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9942,
                        "src": "3858:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9959,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9954,
                        "src": "3866:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9957,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9701,
                      "src": "3848:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9960,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3848:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9961,
                  "nodeType": "EmitStatement",
                  "src": "3843:29:46"
                }
              ]
            },
            "functionSelector": "14f2d276",
            "id": 9963,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9945,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9944,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3735:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "3735:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "3735:9:46"
              }
            ],
            "name": "addTransferManager",
            "nameLocation": "3691:18:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9943,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9942,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3718:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9963,
                  "src": "3710:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9941,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3710:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3709:16:46"
            },
            "returnParameters": {
              "id": 9946,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3745:0:46"
            },
            "scope": 10167,
            "src": "3682:197:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9985,
              "nodeType": "Block",
              "src": "3951:139:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9973,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9965,
                        "src": "3986:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9970,
                        "name": "_transferManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9716,
                        "src": "3961:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9972,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "3979:6:46",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "3961:24:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 9974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3961:32:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9975,
                  "nodeType": "ExpressionStatement",
                  "src": "3961:32:46"
                },
                {
                  "assignments": [
                    9977
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9977,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4017:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 9985,
                      "src": "4003:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 9976,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4003:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 9979,
                  "initialValue": {
                    "hexValue": "5472616e736665724d616e61676572",
                    "id": 9978,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4025:17:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_e7caa93b03e98a472ffbdb5a38430e587fdccd6672a1e391dc128389ecb0c269",
                      "typeString": "literal_string \"TransferManager\""
                    },
                    "value": "TransferManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4003:39:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 9981,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9965,
                        "src": "4069:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 9982,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9977,
                        "src": "4077:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9980,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9707,
                      "src": "4057:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 9983,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4057:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9984,
                  "nodeType": "EmitStatement",
                  "src": "4052:31:46"
                }
              ]
            },
            "functionSelector": "965e61ea",
            "id": 9986,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 9968,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 9967,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "3941:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "3941:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "3941:9:46"
              }
            ],
            "name": "removeTransferManager",
            "nameLocation": "3894:21:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9966,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9965,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "3924:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 9986,
                  "src": "3916:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9964,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3916:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3915:16:46"
            },
            "returnParameters": {
              "id": 9969,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3951:0:46"
            },
            "scope": 10167,
            "src": "3885:205:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 9999,
              "nodeType": "Block",
              "src": "4213:51:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 9996,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9989,
                        "src": "4250:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 9994,
                        "name": "_recoveryAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9719,
                        "src": "4230:15:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 9995,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4246:3:46",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "4230:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 9997,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4230:27:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 9993,
                  "id": 9998,
                  "nodeType": "Return",
                  "src": "4223:34:46"
                }
              ]
            },
            "documentation": {
              "id": 9987,
              "nodeType": "StructuredDocumentation",
              "src": "4096:44:46",
              "text": "@dev RecoveryAgent Role _recoveryAgents"
            },
            "functionSelector": "7ad78a46",
            "id": 10000,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isRecoveryAgent",
            "nameLocation": "4154:15:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 9990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9989,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4178:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10000,
                  "src": "4170:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9988,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4170:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4169:16:46"
            },
            "returnParameters": {
              "id": 9993,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9992,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10000,
                  "src": "4207:4:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 9991,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4207:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4206:6:46"
            },
            "scope": 10167,
            "src": "4145:119:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10022,
              "nodeType": "Block",
              "src": "4331:130:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10010,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10002,
                        "src": "4361:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10007,
                        "name": "_recoveryAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9719,
                        "src": "4341:15:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10009,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4357:3:46",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "4341:19:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 10011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4341:27:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10012,
                  "nodeType": "ExpressionStatement",
                  "src": "4341:27:46"
                },
                {
                  "assignments": [
                    10014
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10014,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4392:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 10022,
                      "src": "4378:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 10013,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4378:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10016,
                  "initialValue": {
                    "hexValue": "5265636f766572794167656e74",
                    "id": 10015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4400:15:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bcb75b988990bece39580fcc61a39717325526a6d8569b57a66c706f2b331fbc",
                      "typeString": "literal_string \"RecoveryAgent\""
                    },
                    "value": "RecoveryAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4378:37:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 10018,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10002,
                        "src": "4440:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 10019,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10014,
                        "src": "4448:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 10017,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9701,
                      "src": "4430:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 10020,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4430:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10021,
                  "nodeType": "EmitStatement",
                  "src": "4425:29:46"
                }
              ]
            },
            "functionSelector": "7489453d",
            "id": 10023,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10005,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10004,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4321:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "4321:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "4321:9:46"
              }
            ],
            "name": "addRecoveryAgent",
            "nameLocation": "4279:16:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10003,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10002,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4304:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10023,
                  "src": "4296:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10001,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4296:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4295:16:46"
            },
            "returnParameters": {
              "id": 10006,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4331:0:46"
            },
            "scope": 10167,
            "src": "4270:191:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10045,
              "nodeType": "Block",
              "src": "4531:135:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10033,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10025,
                        "src": "4564:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10030,
                        "name": "_recoveryAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9719,
                        "src": "4541:15:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10032,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4557:6:46",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "4541:22:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 10034,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4541:30:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10035,
                  "nodeType": "ExpressionStatement",
                  "src": "4541:30:46"
                },
                {
                  "assignments": [
                    10037
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10037,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4595:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 10045,
                      "src": "4581:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 10036,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4581:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10039,
                  "initialValue": {
                    "hexValue": "5265636f766572794167656e74",
                    "id": 10038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4603:15:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_bcb75b988990bece39580fcc61a39717325526a6d8569b57a66c706f2b331fbc",
                      "typeString": "literal_string \"RecoveryAgent\""
                    },
                    "value": "RecoveryAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4581:37:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 10041,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10025,
                        "src": "4645:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 10042,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10037,
                        "src": "4653:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 10040,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9707,
                      "src": "4633:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 10043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4633:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10044,
                  "nodeType": "EmitStatement",
                  "src": "4628:31:46"
                }
              ]
            },
            "functionSelector": "c8777b50",
            "id": 10046,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10028,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10027,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4521:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "4521:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "4521:9:46"
              }
            ],
            "name": "removeRecoveryAgent",
            "nameLocation": "4476:19:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10026,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10025,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4504:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10046,
                  "src": "4496:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10024,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4496:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4495:16:46"
            },
            "returnParameters": {
              "id": 10029,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4531:0:46"
            },
            "scope": 10167,
            "src": "4467:199:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10059,
              "nodeType": "Block",
              "src": "4795:53:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10056,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10049,
                        "src": "4834:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10054,
                        "name": "_complianceAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9722,
                        "src": "4812:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10055,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4830:3:46",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "4812:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 10057,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4812:29:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 10053,
                  "id": 10058,
                  "nodeType": "Return",
                  "src": "4805:36:46"
                }
              ]
            },
            "documentation": {
              "id": 10047,
              "nodeType": "StructuredDocumentation",
              "src": "4672:48:46",
              "text": "@dev ComplianceAgent Role _complianceAgents"
            },
            "functionSelector": "2001c350",
            "id": 10060,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isComplianceAgent",
            "nameLocation": "4734:17:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10050,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10049,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4760:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10060,
                  "src": "4752:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10048,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4752:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4751:16:46"
            },
            "returnParameters": {
              "id": 10053,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10052,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10060,
                  "src": "4789:4:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 10051,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4789:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4788:6:46"
            },
            "scope": 10167,
            "src": "4725:123:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10082,
              "nodeType": "Block",
              "src": "4917:134:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10070,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10062,
                        "src": "4949:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10067,
                        "name": "_complianceAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9722,
                        "src": "4927:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10069,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "4945:3:46",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "4927:21:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 10071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4927:29:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10072,
                  "nodeType": "ExpressionStatement",
                  "src": "4927:29:46"
                },
                {
                  "assignments": [
                    10074
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10074,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "4980:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 10082,
                      "src": "4966:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 10073,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4966:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10076,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e63654167656e74",
                    "id": 10075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4988:17:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a508d6f9ac74eef76008f5e83c141fbac4bfed9575d3912bafeb1b7bd282dbb4",
                      "typeString": "literal_string \"ComplianceAgent\""
                    },
                    "value": "ComplianceAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4966:39:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 10078,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10062,
                        "src": "5030:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 10079,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10074,
                        "src": "5038:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 10077,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9701,
                      "src": "5020:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 10080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5020:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10081,
                  "nodeType": "EmitStatement",
                  "src": "5015:29:46"
                }
              ]
            },
            "functionSelector": "3cdf8000",
            "id": 10083,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10065,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10064,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "4907:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "4907:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "4907:9:46"
              }
            ],
            "name": "addComplianceAgent",
            "nameLocation": "4863:18:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10062,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "4890:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10083,
                  "src": "4882:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10061,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4882:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4881:16:46"
            },
            "returnParameters": {
              "id": 10066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4917:0:46"
            },
            "scope": 10167,
            "src": "4854:197:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10105,
              "nodeType": "Block",
              "src": "5123:139:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10093,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10085,
                        "src": "5158:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10090,
                        "name": "_complianceAgents",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9722,
                        "src": "5133:17:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10092,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5151:6:46",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "5133:24:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 10094,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5133:32:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10095,
                  "nodeType": "ExpressionStatement",
                  "src": "5133:32:46"
                },
                {
                  "assignments": [
                    10097
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10097,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5189:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 10105,
                      "src": "5175:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 10096,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5175:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10099,
                  "initialValue": {
                    "hexValue": "436f6d706c69616e63654167656e74",
                    "id": 10098,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5197:17:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_a508d6f9ac74eef76008f5e83c141fbac4bfed9575d3912bafeb1b7bd282dbb4",
                      "typeString": "literal_string \"ComplianceAgent\""
                    },
                    "value": "ComplianceAgent"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5175:39:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 10101,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10085,
                        "src": "5241:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 10102,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10097,
                        "src": "5249:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 10100,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9707,
                      "src": "5229:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 10103,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5229:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10104,
                  "nodeType": "EmitStatement",
                  "src": "5224:31:46"
                }
              ]
            },
            "functionSelector": "c6006c9a",
            "id": 10106,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10088,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10087,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5113:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "5113:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "5113:9:46"
              }
            ],
            "name": "removeComplianceAgent",
            "nameLocation": "5066:21:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10086,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10085,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5096:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10106,
                  "src": "5088:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10084,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5088:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5087:16:46"
            },
            "returnParameters": {
              "id": 10089,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5123:0:46"
            },
            "scope": 10167,
            "src": "5057:205:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10119,
              "nodeType": "Block",
              "src": "5394:54:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10116,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10109,
                        "src": "5434:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10114,
                        "name": "_whiteListManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9725,
                        "src": "5411:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10115,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5430:3:46",
                      "memberName": "has",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11900,
                      "src": "5411:22:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address) view returns (bool)"
                      }
                    },
                    "id": 10117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5411:30:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 10113,
                  "id": 10118,
                  "nodeType": "Return",
                  "src": "5404:37:46"
                }
              ]
            },
            "documentation": {
              "id": 10107,
              "nodeType": "StructuredDocumentation",
              "src": "5268:50:46",
              "text": "@dev WhiteListManager Role _whiteListManagers"
            },
            "functionSelector": "bd92fcfe",
            "id": 10120,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isWhiteListManager",
            "nameLocation": "5332:18:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10110,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10109,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5359:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10120,
                  "src": "5351:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10108,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5351:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5350:16:46"
            },
            "returnParameters": {
              "id": 10113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10112,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 10120,
                  "src": "5388:4:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 10111,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5388:4:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5387:6:46"
            },
            "scope": 10167,
            "src": "5323:125:46",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 10142,
              "nodeType": "Block",
              "src": "5518:136:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10130,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10122,
                        "src": "5551:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10127,
                        "name": "_whiteListManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9725,
                        "src": "5528:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10129,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5547:3:46",
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11847,
                      "src": "5528:22:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 10131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5528:30:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10132,
                  "nodeType": "ExpressionStatement",
                  "src": "5528:30:46"
                },
                {
                  "assignments": [
                    10134
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10134,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5582:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 10142,
                      "src": "5568:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 10133,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5568:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10136,
                  "initialValue": {
                    "hexValue": "57686974654c6973744d616e61676572",
                    "id": 10135,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5590:18:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_052868d2c8964dbaa3021ee983d1fb29a39ffbaeec64d9b774d6d61d1690ec93",
                      "typeString": "literal_string \"WhiteListManager\""
                    },
                    "value": "WhiteListManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5568:40:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 10138,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10122,
                        "src": "5633:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 10139,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10134,
                        "src": "5641:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 10137,
                      "name": "RoleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9701,
                      "src": "5623:9:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 10140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5623:24:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10141,
                  "nodeType": "EmitStatement",
                  "src": "5618:29:46"
                }
              ]
            },
            "functionSelector": "3966904d",
            "id": 10143,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10125,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10124,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5508:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "5508:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "5508:9:46"
              }
            ],
            "name": "addWhiteListManager",
            "nameLocation": "5463:19:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10123,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10122,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5491:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10143,
                  "src": "5483:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10121,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5483:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5482:16:46"
            },
            "returnParameters": {
              "id": 10126,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5518:0:46"
            },
            "scope": 10167,
            "src": "5454:200:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 10165,
              "nodeType": "Block",
              "src": "5727:141:46",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 10153,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10145,
                        "src": "5763:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 10150,
                        "name": "_whiteListManagers",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9725,
                        "src": "5737:18:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Role_$11820_storage",
                          "typeString": "struct Roles.Role storage ref"
                        }
                      },
                      "id": 10152,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5756:6:46",
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11873,
                      "src": "5737:25:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Role_$11820_storage_ptr_$_t_address_$returns$__$bound_to$_t_struct$_Role_$11820_storage_ptr_$",
                        "typeString": "function (struct Roles.Role storage pointer,address)"
                      }
                    },
                    "id": 10154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5737:33:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10155,
                  "nodeType": "ExpressionStatement",
                  "src": "5737:33:46"
                },
                {
                  "assignments": [
                    10157
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10157,
                      "mutability": "mutable",
                      "name": "_role",
                      "nameLocation": "5794:5:46",
                      "nodeType": "VariableDeclaration",
                      "scope": 10165,
                      "src": "5780:19:46",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 10156,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5780:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 10159,
                  "initialValue": {
                    "hexValue": "57686974654c6973744d616e61676572",
                    "id": 10158,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "5802:18:46",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_052868d2c8964dbaa3021ee983d1fb29a39ffbaeec64d9b774d6d61d1690ec93",
                      "typeString": "literal_string \"WhiteListManager\""
                    },
                    "value": "WhiteListManager"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5780:40:46"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 10161,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10145,
                        "src": "5847:6:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 10162,
                        "name": "_role",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10157,
                        "src": "5855:5:46",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 10160,
                      "name": "RoleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9707,
                      "src": "5835:11:46",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (address,string memory)"
                      }
                    },
                    "id": 10163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5835:26:46",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10164,
                  "nodeType": "EmitStatement",
                  "src": "5830:31:46"
                }
              ]
            },
            "functionSelector": "4aff432c",
            "id": 10166,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 10148,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 10147,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "5717:9:46"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9746,
                  "src": "5717:9:46"
                },
                "nodeType": "ModifierInvocation",
                "src": "5717:9:46"
              }
            ],
            "name": "removeWhiteListManager",
            "nameLocation": "5669:22:46",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 10146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10145,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "5700:6:46",
                  "nodeType": "VariableDeclaration",
                  "scope": 10166,
                  "src": "5692:14:46",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 10144,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5692:7:46",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5691:16:46"
            },
            "returnParameters": {
              "id": 10149,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5727:0:46"
            },
            "scope": 10167,
            "src": "5660:208:46",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 10168,
        "src": "1218:4652:46",
        "usedErrors": []
      }
    ],
    "src": "1093:4778:46"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.396Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "isAgentAdmin(address)": {
        "details": "AgentAdmin Role _agentAdmin"
      },
      "isComplianceAgent(address)": {
        "details": "ComplianceAgent Role _complianceAgents"
      },
      "isFreezer(address)": {
        "details": "Freezer Role _freezers"
      },
      "isRecoveryAgent(address)": {
        "details": "RecoveryAgent Role _recoveryAgents"
      },
      "isSupplyModifier(address)": {
        "details": "SupplyModifier Role _supplyModifiers"
      },
      "isTransferManager(address)": {
        "details": "TransferManager Role _transferManagers"
      },
      "isWhiteListManager(address)": {
        "details": "WhiteListManager Role _whiteListManagers"
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}